二叉树的中序遍历。给定一个二叉树,返回它的中序 遍历。
示例:
1 |
|
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
1 |
|
思路一
递归解决。时间复杂度 \(O(n)\)。
1 |
|
思路二
栈解决。时间复杂度 \(O(n)\)。
1 |
|
思路三
Morris Traversal 遍历。时间复杂度 \(O(n)\),额外空间复杂度 \(O(1)\)。该方法需要找到当前结点的前驱结点。步骤如下
- 如果当前节点的左孩子为空,则输出当前节点并将其右孩子作为当前节点。
- 如果当前节点的左孩子不为空,在当前节点的左子树中找到当前节点在中序遍历下的前驱节点。
- 如果前驱节点的右孩子为空,将它的右孩子设置为当前节点。当前节点更新为当前节点的左孩子。
- 如果前驱节点的右孩子为当前节点,将它的右孩子重新设为空(恢复树的形状)。输出当前节点。当前节点更新为当前节点的右孩子。
- 重复以上1、2直到当前节点为空。
如下图所示:
代码如下:
1 |
|
相似问题
- Validate Binary Search Tree
- Binary Tree Preorder Traversal
- Binary Tree Postorder Traversal
- Binary Search Tree Iterator
- Kth Smallest Element in a BST
- Closest Binary Search Tree Value II
- Inorder Successor in BST
- Convert Binary Search Tree to Sorted Doubly Linked List
- Minimum Distance Between BST Nodes