Skip to content

Commit cd78e44

Browse files
committed
Update 0094. 二叉树的中序遍历.md
1 parent 8b1dc58 commit cd78e44

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

Solutions/0094. 二叉树的中序遍历.md

+15-12
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@
4040

4141
### 思路 1:递归遍历
4242

43-
二叉树的前序遍历递归实现步骤为
43+
二叉树的中序遍历递归实现步骤为
4444

4545
1. 判断二叉树是否为空,为空则直接返回。
46-
2. 先访问根节点
47-
3. 然后递归遍历左子树
46+
2. 先递归遍历左子树
47+
3. 然后访问根节点
4848
4. 最后递归遍历右子树。
4949

5050
### 思路 1:代码
@@ -71,18 +71,21 @@ class Solution:
7171

7272
### 思路 2:模拟栈迭代遍历
7373

74-
二叉树的前序遍历递归实现的过程,实际上就是调用系统栈的过程。我们也可以使用一个显式栈 `stack` 来模拟递归的过程
74+
我们可以使用一个显式栈 $stack$ 来模拟二叉树的中序遍历递归的过程
7575

76-
前序遍历的顺序为:根节点 - 左子树 - 右子树,而根据栈的「先入后出」特点,所以入栈的顺序应该为:先放入右子树,再放入左子树。这样可以保证最终遍历顺序为前序遍历顺序。
76+
与前序遍历不同,访问根节点要放在左子树遍历完之后。因此我们需要保证:**在左子树访问之前,当前节点不能提前出栈**
7777

78-
二叉树的前序遍历显式栈实现步骤如下:
78+
我们应该从根节点开始,循环遍历左子树,不断将当前子树的根节点放入栈中,直到当前节点无左子树时,从栈中弹出该节点并进行处理。
79+
80+
然后再访问该元素的右子树,并进行上述循环遍历左子树的操作。这样可以保证最终遍历顺序为中序遍历顺序。
81+
82+
二叉树的中序遍历显式栈实现步骤如下:
7983

8084
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$,并访问该元素,然后尝试访问该节点的右子树。
8689

8790
### 思路 2:代码
8891

@@ -96,7 +99,7 @@ class Solution:
9699
stack = []
97100

98101
while root or stack: # 根节点或栈不为空
99-
while root:
102+
while root:
100103
stack.append(root) # 将当前树的根节点入栈
101104
root = root.left # 找到最左侧节点
102105

0 commit comments

Comments
 (0)