94. Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes' values.
Example:
Input: [1,null,2,3]
1
\
2
/
3
Output: [1,3,2]Follow up: Recursive solution is trivial, could you do it iteratively?
解法
递归
中序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它本身,最后打印它的右子树。
中序遍历的递推公式:
inOrder(r) = inOrder(r->left)->print r->inOrder(r->right)
加入条件判断可以减少函数调用,增加效率。
时间复杂度:。
空间复杂度:最坏情况下 ,平均情况下 , 为节点数目。
迭代
迭代需要使用栈记录节点。
莫里斯遍历
在这种方法中,我们必须使用一种新的数据结构——线索二叉树,策略如下:
例如:
首先,1 是根节点,所以初始化 1 为 current, 1 有左子树,也就是 2, current 的左子树是
所以在这个子树中,最右边的节点是5,然后让 current(1) 作为 5 的右子节点。Set current = cuurent, left (current = 2)。树现在看起来像这样
对于当前的 2,它有左孩子 4,我们可以继续上面的过程
然后添加4,因为它没有左子节点,然后依次添加2、5、1、3,对于左子节点6的节点3,执行上面的操作。最后,逆序是[4,2,5,1,6,3]。
Last updated
Was this helpful?