Skip to content

Commit c61c04d

Browse files
committed
solve problem Binary Tree Inorder Traversal
1 parent 8f0177b commit c61c04d

File tree

5 files changed

+121
-0
lines changed

5 files changed

+121
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ All solutions will be accepted!
4040
|1|[Two Sum](https://leetcode-cn.com/problems/two-sum/description/)|[java/py/js](./algorithms/TwoSum)|Easy|
4141
|9|[Palindrome Number](https://leetcode-cn.com/problems/palindrome-number/description/)|[java/py/js](./algorithms/PalindromeNumber)|Easy|
4242
|389|[Find The Difference](https://leetcode-cn.com/problems/find-the-difference/description/)|[java/py/js](./algorithms/FindTheDifference)|Easy|
43+
|94|[Binary Tree Inorder Traversal](https://leetcode-cn.com/problems/binary-tree-inorder-traversal/description/)|[java/py/js](./algorithms/BinaryTreeInorderTraversal)|Medium|
4344

4445
# Database
4546
|596|[Big Countries](https://leetcode-cn.com/problems/big-countries/description/)|[mysql](./database/BigCountries)|Easy|
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Binary Tree Inorder Traversal
2+
Use recursion can easy to solve this problem, like below:
3+
```
4+
# Definition for a binary tree node.
5+
# class TreeNode(object):
6+
# def __init__(self, x):
7+
# self.val = x
8+
# self.left = None
9+
# self.right = None
10+
11+
class Solution(object):
12+
def inorderTraversal(self, root):
13+
"""
14+
:type root: TreeNode
15+
:rtype: List[int]
16+
"""
17+
# left -> root -> right
18+
if not root:
19+
return []
20+
return self.inorderTraversal(root.left) + [ root.val ] + self.inorderTraversal(root.right)
21+
```
22+
But we have to use iteration to solve this problem, the stack and the hashmap is the solution
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode(int x) { val = x; }
8+
* }
9+
*/
10+
class Solution {
11+
public List<Integer> inorderTraversal(TreeNode root) {
12+
List<TreeNode> stack = new ArrayList<TreeNode>();
13+
List<Integer> res = new ArrayList<Integer>();
14+
Map<TreeNode, Boolean> map = new HashMap<TreeNode, Boolean>();
15+
16+
if (root == null) return res;
17+
18+
stack.add(root);
19+
while (stack.size() > 0) {
20+
TreeNode node = stack.get(stack.size() - 1);
21+
if (node.left != null && map.get(node) == null) {
22+
map.put(node, true);
23+
stack.add(node.left);
24+
} else {
25+
stack.remove(stack.size() - 1);
26+
res.add(node.val);
27+
if (node.right != null) {
28+
stack.add(node.right);
29+
}
30+
}
31+
}
32+
return res;
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val) {
4+
* this.val = val;
5+
* this.left = this.right = null;
6+
* }
7+
*/
8+
/**
9+
* @param {TreeNode} root
10+
* @return {number[]}
11+
*/
12+
var inorderTraversal = function(root) {
13+
if (!root) {
14+
return []
15+
}
16+
let stack = [root],
17+
res = []
18+
19+
while (stack.length > 0) {
20+
let node = stack[stack.length - 1]
21+
if (node.left && node.travered === undefined) {
22+
node.travered = true
23+
stack.push(node.left)
24+
} else {
25+
node = stack.pop()
26+
res.push(node.val)
27+
if (node.right) {
28+
stack.push(node.right)
29+
}
30+
}
31+
}
32+
return res
33+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode(object):
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
class Solution(object):
9+
def inorderTraversal(self, root):
10+
"""
11+
:type root: TreeNode
12+
:rtype: List[int]
13+
"""
14+
# left -> root -> right
15+
if not root:
16+
return []
17+
stack = [root]
18+
res = []
19+
traverd_map = {}
20+
while len(stack) > 0:
21+
node = stack[-1]
22+
if node.left and traverd_map.get(node) == None:
23+
traverd_map[node] = True
24+
stack.append(node.left)
25+
else:
26+
stack.pop()
27+
res.append(node.val)
28+
if node.right:
29+
stack.append(node.right)
30+
31+
return res

0 commit comments

Comments
 (0)