Skip to content

Commit 13dde75

Browse files
committed
✨ new post: leetcode p94
1 parent 527bb0b commit 13dde75

File tree

3 files changed

+111
-0
lines changed

3 files changed

+111
-0
lines changed

_posts/2022-09-08-leetcode-94.md

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
---
2+
title: "[Leetcode] 94. Binary Tree Inorder Traversal explained"
3+
excerpt: "Leetcode daily challenge 2022 september 8th solution"
4+
header:
5+
overlay_image: /public/images/problem-solving-common-header.png
6+
tags:
7+
- Tree
8+
- Inorder traversal
9+
last_modified_at: 2022-09-08T11:07:08+09:00
10+
---
11+
12+
<a href="https://leetcode.com/">
13+
<img src="/public/images/leetcode-logo.jpeg"/>
14+
</a>
15+
16+
## Problem
17+
18+
<a href="https://leetcode.com/problems/binary-tree-inorder-traversal/">
19+
<img src="/public/images/leetcode-94.png"/>
20+
</a>
21+
22+
<br/>
23+
24+
## Key Idea
25+
26+
Recursive approach is trivial.
27+
We can implement inorder traversal using `Stack`.
28+
29+
```python
30+
curNode <- root
31+
while true:
32+
if curNode is null:
33+
if stack is empty:
34+
break;
35+
tmpNode <- stack.pop();
36+
add tmpNode.val to result
37+
curNode <- tmpNode.right;
38+
else:
39+
if curNode is not null:
40+
push curNode into stack
41+
else:
42+
curNode <- curNode.left;
43+
```
44+
45+
- Time: $$O(n)$$
46+
- Space: $$O(n)$$
47+
48+
<br/>
49+
50+
## Implementation
51+
52+
<img src="/public/images/leetcode-94-result.png"/>
53+
54+
### Recursive approach
55+
56+
```java
57+
/**
58+
* author: jooncco
59+
* written: 2022. 9. 8. Tue. 11:34:14 [UTC+9]
60+
**/
61+
62+
class Solution {
63+
public List<Integer> inorderTraversal(TreeNode root) {
64+
List<Integer> result = new LinkedList<>();
65+
inorder(result, root);
66+
return result;
67+
}
68+
69+
private void inorder(List<Integer> arr, TreeNode node) {
70+
if (node == null) return;
71+
72+
inorder(arr, node.left);
73+
arr.add(node.val);
74+
inorder(arr, node.right);
75+
}
76+
}
77+
```
78+
79+
### Iterative approach
80+
81+
```java
82+
/**
83+
* author: jooncco
84+
* written: 2022. 9. 8. Tue. 13:36:14 [UTC+9]
85+
**/
86+
87+
class Solution {
88+
public List<Integer> inorderTraversal(TreeNode root) {
89+
Stack<TreeNode> stack = new Stack<>();
90+
List<Integer> result= new LinkedList<>();
91+
92+
TreeNode curNode = root;
93+
while (true) {
94+
if (curNode == null) {
95+
if (stack.isEmpty()) break;
96+
result.add(stack.peek().val);
97+
curNode= stack.pop().right;
98+
} else {
99+
if (curNode.left != null) {
100+
stack.push(curNode);
101+
curNode= curNode.left;
102+
} else {
103+
result.add(curNode.val);
104+
curNode= curNode.right;
105+
}
106+
}
107+
}
108+
return result;
109+
}
110+
}
111+
```
169 KB
Loading

public/images/leetcode-94.png

177 KB
Loading

0 commit comments

Comments
 (0)