Skip to content

Commit e514260

Browse files
committed
feat: update leetcode solution: No.0094
1 parent 8cdca7c commit e514260

File tree

4 files changed

+150
-1
lines changed

4 files changed

+150
-1
lines changed

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@
9696

9797
### 二叉树
9898

99+
- [二叉树的前序遍历](/solution/0100-0199/0144.Binary%20Tree%20Preorder%20Traversal/README.md)
100+
- [二叉树的后序遍历](/solution/0100-0199/0145.Binary%20Tree%20Postorder%20Traversal/README.md)
101+
- [二叉树的中序遍历](/solution/0000-0099/0094.Binary%20Tree%20Inorder%20Traversal/README.md)
99102
- [对称二叉树](/solution/0100-0199/0101.Symmetric%20Tree/README.md)
100103
- [树的子结构](/lcof/面试题26.%20树的子结构/README.md)
101104
- [翻转二叉树](/solution/0200-0299/0226.Invert%20Binary%20Tree/README.md)

README_EN.md

+3
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ Complete solutions to [LeetCode](https://leetcode-cn.com/problemset/all/), [LCOF
9494

9595
### Binary Tree
9696

97+
- [Binary Tree Preorder Traversal](/solution/0100-0199/0144.Binary%20Tree%20Preorder%20Traversal/README_EN.md)
98+
- [Binary Tree Postorder Traversal](/solution/0100-0199/0145.Binary%20Tree%20Postorder%20Traversal/README_EN.md)
99+
- [Binary Tree Inorder Traversal](/solution/0000-0099/0094.Binary%20Tree%20Inorder%20Traversal/README_EN.md)
97100
- [Symmetric Tree](/solution/0100-0199/0101.Symmetric%20Tree/README_EN.md)
98101
- [Invert Binary Tree](/solution/0200-0299/0226.Invert%20Binary%20Tree/README_EN.md)
99102
- [Binary Tree Level Order Traversal](/solution/0100-0199/0102.Binary%20Tree%20Level%20Order%20Traversal/README_EN.md)

solution/0000-0099/0094.Binary Tree Inorder Traversal/README.md

+76-1
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,23 @@
2424

2525
<!-- 这里可写通用的实现逻辑 -->
2626

27-
递归遍历。
27+
递归遍历或利用栈实现非递归遍历。
28+
29+
非递归的思路如下:
30+
31+
1. 定义一个栈
32+
2. 将树的左节点依次入栈
33+
3. 左节点为空时,弹出栈顶元素并处理
34+
4. 重复 2-3 的操作
2835

2936
<!-- tabs:start -->
3037

3138
### **Python3**
3239

3340
<!-- 这里可写当前语言的特殊实现逻辑 -->
3441

42+
递归:
43+
3544
```python
3645
# Definition for a binary tree node.
3746
# class TreeNode:
@@ -51,10 +60,36 @@ class Solution:
5160
return res
5261
```
5362

63+
非递归:
64+
65+
```python
66+
# Definition for a binary tree node.
67+
# class TreeNode:
68+
# def __init__(self, val=0, left=None, right=None):
69+
# self.val = val
70+
# self.left = left
71+
# self.right = right
72+
class Solution:
73+
def inorderTraversal(self, root: TreeNode) -> List[int]:
74+
s = []
75+
res = []
76+
while root or s:
77+
if root:
78+
s.append(root)
79+
root = root.left
80+
else:
81+
root = s.pop()
82+
res.append(root.val)
83+
root = root.right
84+
return res
85+
```
86+
5487
### **Java**
5588

5689
<!-- 这里可写当前语言的特殊实现逻辑 -->
5790

91+
递归:
92+
5893
```java
5994
/**
6095
* Definition for a binary tree node.
@@ -91,6 +126,46 @@ class Solution {
91126
}
92127
```
93128

129+
非递归:
130+
131+
```java
132+
/**
133+
* Definition for a binary tree node.
134+
* public class TreeNode {
135+
* int val;
136+
* TreeNode left;
137+
* TreeNode right;
138+
* TreeNode() {}
139+
* TreeNode(int val) { this.val = val; }
140+
* TreeNode(int val, TreeNode left, TreeNode right) {
141+
* this.val = val;
142+
* this.left = left;
143+
* this.right = right;
144+
* }
145+
* }
146+
*/
147+
class Solution {
148+
public List<Integer> inorderTraversal(TreeNode root) {
149+
if (root == null) {
150+
return Collections.emptyList();
151+
}
152+
List<Integer> res = new ArrayList<>();
153+
Deque<TreeNode> s = new ArrayDeque<>();
154+
while (root != null || !s.isEmpty()) {
155+
if (root != null) {
156+
s.push(root);
157+
root = root.left;
158+
} else {
159+
root = s.pop();
160+
res.add(root.val);
161+
root = root.right;
162+
}
163+
}
164+
return res;
165+
}
166+
}
167+
```
168+
94169
### **...**
95170

96171
```

solution/0000-0099/0094.Binary Tree Inorder Traversal/README_EN.md

+68
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434

3535
### **Python3**
3636

37+
Recusive:
38+
3739
```python
3840
# Definition for a binary tree node.
3941
# class TreeNode:
@@ -53,8 +55,34 @@ class Solution:
5355
return res
5456
```
5557

58+
Non-recursive:
59+
60+
```python
61+
# Definition for a binary tree node.
62+
# class TreeNode:
63+
# def __init__(self, val=0, left=None, right=None):
64+
# self.val = val
65+
# self.left = left
66+
# self.right = right
67+
class Solution:
68+
def inorderTraversal(self, root: TreeNode) -> List[int]:
69+
s = []
70+
res = []
71+
while root or s:
72+
if root:
73+
s.append(root)
74+
root = root.left
75+
else:
76+
root = s.pop()
77+
res.append(root.val)
78+
root = root.right
79+
return res
80+
```
81+
5682
### **Java**
5783

84+
Recursive:
85+
5886
```java
5987
/**
6088
* Definition for a binary tree node.
@@ -91,6 +119,46 @@ class Solution {
91119
}
92120
```
93121

122+
Non-recursive:
123+
124+
```java
125+
/**
126+
* Definition for a binary tree node.
127+
* public class TreeNode {
128+
* int val;
129+
* TreeNode left;
130+
* TreeNode right;
131+
* TreeNode() {}
132+
* TreeNode(int val) { this.val = val; }
133+
* TreeNode(int val, TreeNode left, TreeNode right) {
134+
* this.val = val;
135+
* this.left = left;
136+
* this.right = right;
137+
* }
138+
* }
139+
*/
140+
class Solution {
141+
public List<Integer> inorderTraversal(TreeNode root) {
142+
if (root == null) {
143+
return Collections.emptyList();
144+
}
145+
List<Integer> res = new ArrayList<>();
146+
Deque<TreeNode> s = new ArrayDeque<>();
147+
while (root != null || !s.isEmpty()) {
148+
if (root != null) {
149+
s.push(root);
150+
root = root.left;
151+
} else {
152+
root = s.pop();
153+
res.add(root.val);
154+
root = root.right;
155+
}
156+
}
157+
return res;
158+
}
159+
}
160+
```
161+
94162
### **...**
95163

96164
```

0 commit comments

Comments
 (0)