Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

Lines changed: 15 additions & 12 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /