94. 二叉树的中序遍历
给定一个二叉树的根节点 root ,返回它的 中序 遍历。
示例 1:
1 | 输入: |
递归
1 | /** |
迭代
1 | var inorderTraversal = function (root) { |
迭代
1 | var inorderTraversal = function (root) { |
morris 遍历
Morris 遍历算法是另一种遍历二叉树的方法,它能将非递归的中序遍历空间复杂度降为 O(1)。
Morris 遍历算法整体步骤如下(假设当前遍历到的节点为 cur。):
- 如果 cur 无左孩子,cur 向右移动(cur=cur.right),加入结果。
- 如果 cur 有左孩子,找到 cur 左子树上最右的节点,记为 mostright:
- 如果 mostright 的 right 指针指向空,让其指向 cur,cur 向左移动(cur=cur.left)
- 如果 mostright 的 right 指针指向 cur,让其指向空,cur加入结果,cur 向右移动(cur=cur.right)
- 重复上述操作,直至访问完整棵树。
1 | var inorderTraversal = function (root) { |