Skip to content

Commit ca0018d

Browse files
Update 114_flatten_binary_tree_to_linked_list__medium.md
1 parent 507a75e commit ca0018d

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,108 @@
11
# 114 Flatten Binary Tree to Linked List – Medium
22

3+
4+
### Problem:
5+
6+
7+
8+
Given a binary tree, flatten it to a linked list in-place.
9+
10+
For example,
11+
Given
12+
13+
1
14+
/ \
15+
2 5
16+
/ \ \
17+
3 4 6
18+
The flattened tree should look like:
19+
20+
1
21+
\
22+
2
23+
\
24+
3
25+
\
26+
4
27+
\
28+
5
29+
\
30+
6
31+
32+
### Thoughts:
33+
34+
35+
36+
Idea is to use a modified preorder walk of the tree. Root, left, right.
37+
38+
Have a global pointer that keeps the node that needs a new right child to insert.
39+
40+
41+
### Solutions:
42+
43+
44+
45+
```java
46+
/**
47+
* Definition for a binary tree node.
48+
* public class TreeNode {
49+
* int val;
50+
* TreeNode left;
51+
* TreeNode right;
52+
* TreeNode(int x) { val = x; }
53+
* }
54+
*/
55+
public class Solution {
56+
TreeNode pointer = new TreeNode(-1);
57+
public void flatten(TreeNode root) {
58+
flattenTree(root);
59+
}
60+
private void flattenTree(TreeNode node){
61+
if (node != null){
62+
TreeNode left = node.left;
63+
TreeNode right = node.right;
64+
node.left = null;
65+
node.right = null;
66+
pointer.right = node;
67+
pointer = node;
68+
flattenTree(left);
69+
flattenTree(right);
70+
}
71+
}
72+
}
73+
```
74+
Non-Recursion version:
75+
76+
```java
77+
/**
78+
* Definition for a binary tree node.
79+
* public class TreeNode {
80+
* int val;
81+
* TreeNode left;
82+
* TreeNode right;
83+
* TreeNode(int x) { val = x; }
84+
* }
85+
*/
86+
public class Solution {
87+
public void flatten(TreeNode root) {
88+
Stack<TreeNode> stack = new Stack<TreeNode>();
89+
TreeNode p = new TreeNode(-1);
90+
TreeNode node = root;
91+
while (true) {
92+
if (node == null) {
93+
if (stack.size() == 0) {
94+
break;
95+
}
96+
node = stack.pop();
97+
}
98+
p.right = node;
99+
p = node;
100+
if (node.right != null) {
101+
stack.push(node.right);
102+
}
103+
node = node.left;
104+
p.left = null;
105+
}
106+
}
107+
}
108+
```

0 commit comments

Comments
 (0)