Skip to content

Commit d307847

Browse files
solves #114 in java
1 parent 0efcf46 commit d307847

File tree

4 files changed

+51
-20
lines changed

4 files changed

+51
-20
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
| 111 | [Minimum Depth of Binary Tree](https://leetcode.com/problems/minimum-depth-of-binary-tree) | [![Java](assets/java.png)](src/MinimumDepthOfBinaryTree.java) [![Python](assets/python.png)](python/minimum_depth_of_binary_tree.py) | |
107107
| 112 | [Path Sum](https://leetcode.com/problems/path-sum) | [![Java](assets/java.png)](src/PathSum.java) [![Python](assets/python.png)](python/path_sum.py) | |
108108
| 113 | [Path Sum II](https://leetcode.com/problems/path-sum-ii) | [![Java](assets/java.png)](src/PathSumII.java) | |
109-
| 114 | [Flatten Binary Tree to Linked List](https://leetcode.com/problems/flatten-binary-tree-to-linked-list) | | |
109+
| 114 | [Flatten Binary Tree to Linked List](https://leetcode.com/problems/flatten-binary-tree-to-linked-list) | [![Java](assets/java.png)](src/FlattenBinaryTreeToLinkedList.java) | |
110110
| 116 | [Populating Next Right Pointers in Each Node](https://leetcode.com/problems/populating-next-right-pointers-in-each-node) | | |
111111
| 117 | [Populating Next Right Pointers in Each Node II](https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii) | | |
112112
| 118 | [Pascal's Triangle](https://leetcode.com/problems/pascals-triangle) | [![Java](assets/java.png)](src/PascalsTriangle.java) [![Python](assets/python.png)](python/pascals_triangle.py) | |
+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// https://leetcode.com/problems/flatten-binary-tree-to-linked-list
2+
// T: O(n)
3+
// S: O(log(n))
4+
5+
public class FlattenBinaryTreeToLinkedList {
6+
public static void flatten(TreeNode root) {
7+
flattenAndGetLastNode(root);
8+
}
9+
10+
private static TreeNode flattenAndGetLastNode(TreeNode root) {
11+
if (root == null) return null;
12+
13+
TreeNode leftLast = flattenAndGetLastNode(root.left);
14+
TreeNode rightLast = flattenAndGetLastNode(root.right);
15+
16+
if (root.left != null) {
17+
leftLast.right = root.right;
18+
root.right = root.left;
19+
root.left = null;
20+
}
21+
22+
return rightLast != null
23+
? rightLast
24+
: (leftLast == null ? root : leftLast);
25+
}
26+
}

src/HelloWorld.java

+12-18
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,17 @@
1-
import java.util.ArrayList;
2-
import java.util.Collections;
3-
import java.util.List;
4-
51
public class HelloWorld {
62
public static void main(String[] args) {
7-
// ConstructBinaryTreeFromInorderAndPostorderTraversal c = new ConstructBinaryTreeFromInorderAndPostorderTraversal();
8-
// TreeNode treeNode = c.buildTree(new int[] {9, 3, 15, 20, 7}, new int[] {9, 15, 7, 20, 3});
9-
// TreePrinter.print(treeNode);
10-
//
11-
// c = new ConstructBinaryTreeFromInorderAndPostorderTraversal();
12-
// treeNode = c.buildTree(new int[] {2, 1}, new int[] {2, 1});
13-
// TreePrinter.print(treeNode);
14-
//
15-
// c = new ConstructBinaryTreeFromInorderAndPostorderTraversal();
16-
// treeNode = c.buildTree(new int[] {-1}, new int[] {-1});
17-
// TreePrinter.print(treeNode);
3+
TreeNode root = new TreeNode(1);
4+
root.left = new TreeNode(2);
5+
root.right = new TreeNode(5);
6+
root.left.left = new TreeNode(3);
7+
root.left.right = new TreeNode(4);
8+
root.right.right = new TreeNode(6);
9+
10+
TreePrinter.print(root);
11+
12+
FlattenBinaryTreeToLinkedList.flatten(root);
13+
14+
TreePrinter.print(root);
1815

19-
ConstructBinaryTreeFromInorderAndPostorderTraversal c = new ConstructBinaryTreeFromInorderAndPostorderTraversal();
20-
TreeNode treeNode = c.buildTree(new int[] {1, 2, 3, 4}, new int[] {2, 1, 3, 4});
21-
TreePrinter.print(treeNode);
2216
}
2317
}

src/TreeNode.java

+12-1
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,24 @@ public class TreeNode implements TreePrinter.PrintableNode {
33
TreeNode left;
44
TreeNode right;
55
TreeNode() {}
6-
TreeNode(int val) { this.val = val; }
6+
7+
TreeNode(int val) {
8+
this.val = val;
9+
}
10+
711
TreeNode(int val, TreeNode left, TreeNode right) {
812
this.val = val;
913
this.left = left;
1014
this.right = right;
1115
}
1216

17+
@Override
18+
public String toString() {
19+
return "TreeNode{" +
20+
"val=" + val +
21+
'}';
22+
}
23+
1324
@Override
1425
public TreePrinter.PrintableNode getLeft() {
1526
return this.left;

0 commit comments

Comments
 (0)