题目描述(中等难度)

二叉树的先序遍历。

思路分析

之前做过 94 题 的中序遍历,先序遍历的话代码可以直接拿过来用,只需要改一改 的位置。

解法一 递归

递归很好理解了,代码也是最简洁的。

解法二 栈

第二种思路的话,我们还可以将左右子树分别压栈,然后每次从栈里取元素。需要注意的是,因为我们应该先访问左子树,而栈的话是先进后出,所以我们压栈先压右子树。

解法三 Morris Traversal

上边的两种解法,空间复杂度都是 ,利用 Morris Traversal 可以使得空间复杂度变为 。

它的主要思想就是利用叶子节点的左右子树是 ,所以我们可以利用这个空间去存我们需要的节点,详细的可以参考 94 题 中序遍历。

添加好友一起进步~

如果觉得有帮助的话,可以点击 这里 给一个 star 哦 ^^