File tree 1 file changed +106
-0
lines changed
1 file changed +106
-0
lines changed Original file line number Diff line number Diff line change 1
1
# 114 Flatten Binary Tree to Linked List – Medium
2
2
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
+ ```
You can’t perform that action at this time.
0 commit comments