题目内容
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例
示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
示例 4:
输入:root = [1,2]
输出:[1,2]
示例 5:
输入:root = [1,null,2]
输出:[1,2]
提示
1、树中节点数目在范围 [0, 100] 内
2、-100 <= Node.val <= 100
题解
前序遍历就是先根遍历,递归的写法很简单这里就不赘述了。
我们看一个不递归的思想,使用栈来做。
首先,判断栈是否为空或者当前节点是否为空,因为是第一次,所以栈为空,根节点不为空,指针遍历根节点,然后将根节点压栈。
然后,指针指向根节点的左子树,一直重复前两步,直到将全部的左子节点压入栈中。
然后,依次弹栈,遍历每个节点的右子树。
最后,因为有while循环做保障,每次都会判断栈是否为空或者当前节点是否为空,因此右子树的左子节点也会继续被遍历。
最终前序遍历就完成了。
具体请看代码。
(这里插个题外话,前序遍历和中序遍历在栈的遍历顺序上是一致的,区别就是根节点遍历的代码位置不一样而已。)
代码
/** |