File tree 1 file changed +15
-12
lines changed
1 file changed +15
-12
lines changed Original file line number Diff line number Diff line change 40
40
41
41
### 思路 1:递归遍历
42
42
43
- 二叉树的前序遍历递归实现步骤为 :
43
+ 二叉树的中序遍历递归实现步骤为 :
44
44
45
45
1 . 判断二叉树是否为空,为空则直接返回。
46
- 2 . 先访问根节点 。
47
- 3 . 然后递归遍历左子树 。
46
+ 2 . 先递归遍历左子树 。
47
+ 3 . 然后访问根节点 。
48
48
4 . 最后递归遍历右子树。
49
49
50
50
### 思路 1:代码
@@ -71,18 +71,21 @@ class Solution:
71
71
72
72
### 思路 2:模拟栈迭代遍历
73
73
74
- 二叉树的前序遍历递归实现的过程,实际上就是调用系统栈的过程。我们也可以使用一个显式栈 ` stack ` 来模拟递归的过程 。
74
+ 我们可以使用一个显式栈 $ stack$ 来模拟二叉树的中序遍历递归的过程 。
75
75
76
- 前序遍历的顺序为:根节点 - 左子树 - 右子树,而根据栈的「先入后出」特点,所以入栈的顺序应该为:先放入右子树,再放入左子树。这样可以保证最终遍历顺序为前序遍历顺序。
76
+ 与前序遍历不同,访问根节点要放在左子树遍历完之后。因此我们需要保证: ** 在左子树访问之前,当前节点不能提前出栈 ** 。
77
77
78
- 二叉树的前序遍历显式栈实现步骤如下:
78
+ 我们应该从根节点开始,循环遍历左子树,不断将当前子树的根节点放入栈中,直到当前节点无左子树时,从栈中弹出该节点并进行处理。
79
+
80
+ 然后再访问该元素的右子树,并进行上述循环遍历左子树的操作。这样可以保证最终遍历顺序为中序遍历顺序。
81
+
82
+ 二叉树的中序遍历显式栈实现步骤如下:
79
83
80
84
1 . 判断二叉树是否为空,为空则直接返回。
81
- 2 . 初始化维护一个栈,将根节点入栈。
82
- 3 . 当栈不为空时:
83
- 1 . 弹出栈顶元素 ` node ` ,并访问该元素。
84
- 2 . 如果 ` node ` 的右子树不为空,则将 ` node ` 的右子树入栈。
85
- 3 . 如果 ` node ` 的左子树不为空,则将 ` node ` 的左子树入栈。
85
+ 2 . 初始化维护一个空栈。
86
+ 3 . 当根节点或者栈不为空时:
87
+ 1 . 如果当前节点不为空,则循环遍历左子树,并不断将当前子树的根节点入栈。
88
+ 1 . 如果当前节点为空,说明当前节点无左子树,则弹出栈顶元素 $node$,并访问该元素,然后尝试访问该节点的右子树。
86
89
87
90
### 思路 2:代码
88
91
@@ -96,7 +99,7 @@ class Solution:
96
99
stack = []
97
100
98
101
while root or stack: # 根节点或栈不为空
99
- while root:
102
+ while root:
100
103
stack.append(root) # 将当前树的根节点入栈
101
104
root = root.left # 找到最左侧节点
102
105
You can’t perform that action at this time.
0 commit comments