144. Binary Tree Preorder Traversal
problem description
Given a binary tree, return the preorder traversal of its nodes' values.
Example:
algorithm thought
二叉树先跟遍历,递归方法很好做,几行代码就能搞定。这里还是和中序遍历一样,有三种方法。除了简单的递归算法,难一点的就是迭代解法。
迭代解法使用栈辅助,首先需要理解先序遍历的顺序。先序遍历首先访问根节点,然后左子节点,再右子节点。画图可以知道,先序遍历首先会访问左边所有节点,然后由底向上对之前节点的右子树再进行前序遍历。所以直接一个递归得到所有的左边的值,并将右子节点压栈即可。
Morris解法,大概路径和94.-binary tree inorder traversal很像,只是将输出值的地方改变了,在中序遍历中Morris解法中,我们再进入右子树的时候将值打印,但是先序遍历的时候,我们在第一次访问到节点的时候就打印,Morris具体过程可以去94题看思路
code
algorithm analysis
树遍历算法时间复杂度都是O(n),关键是空间复杂度,递归和使用栈辅助迭代的算法空间复杂度都是O(n).但是Morris算法空间复杂度是O(1),使用了大量的空闲NULL节点。
Last updated