代码随想录算法训练营第十四天|144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历

144. 二叉树的前序遍历

递归法:注意vec地址传递

代码随想录算法训练营第十四天|144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历_第1张图片

迭代法:先将根节点入栈,在栈不为空时进行迭代:处理栈顶值存入结果数组,若该节点有右节点则存入栈,若有左节点则存入栈,依次循环。

代码随想录算法训练营第十四天|144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历_第2张图片

145. 二叉树的后序遍历

递归法:注意vec地址传递

代码随想录算法训练营第十四天|144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历_第3张图片

迭代法:与前序遍历类似,讲左右节点处理顺序颠倒,最后翻转结果数组

代码随想录算法训练营第十四天|144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历_第4张图片

94. 二叉树的中序遍历

递归法:注意vec地址传递

代码随想录算法训练营第十四天|144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历_第5张图片

迭代法:先将根节点存为cur节点,当cur节点不为空或stack不为空时执行迭代:

若cur节点不为空,将cur存入栈且一直向左遍历;当cur节点为空时,cur遍历至栈中的top节点,并取出存入结果数组,cur遍历至右节点,依次循环。

代码随想录算法训练营第十四天|144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历_第6张图片

拓展:统一迭代法

思路:每次循环取栈顶值作为note。当note不为空时,先将所有元素倒序存入栈(例如:前序遍历按“右左中”顺序存入栈),并在存入中后存入NULL作为标记;当note为空时,先pop NULL,note取为栈顶元素,存入结果数组。

注意:循环开始前要先将root存入栈,倒序存入note前要先弹出root

前序遍历:中左右-右左中

代码随想录算法训练营第十四天|144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历_第7张图片

后序遍历:左右中-中右左

代码随想录算法训练营第十四天|144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历_第8张图片

中序遍历:左中右-右中左

代码随想录算法训练营第十四天|144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历_第9张图片

你可能感兴趣的:(算法,数据结构,c++)