Skip to content

Commit 30531df

Browse files
committed
practice
1 parent d9a4b70 commit 30531df

5 files changed

+192
-18
lines changed

src/problems/leetcode/BinaryTreeMaxPathSum.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ private static int traverse(TreeNode node) {
3535
return 0;
3636
}
3737

38-
int leftSum = traverse(node.left), rightSum = traverse(node.right);
38+
int leftSum = traverse(node.left);
39+
int rightSum = traverse(node.right);
3940
// this node only, this node with left sum, this node with right sum
4041
int maxChildSum = Math.max(node.val, node.val + Math.max(leftSum, rightSum));
4142
maxSum = Math.max(maxChildSum, maxSum);

src/problems/leetcode/PopulatingNextRightPointersInEachNode.java

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,28 +37,35 @@ public String toString() {
3737
}
3838
}
3939

40-
private List<Node> prevs = new ArrayList<>();
41-
40+
// runtime: O(N)
41+
// space: O(N/2) which is actually O(N). N/2 is the number of nodes in the leaf level.
4242
public Node connect(Node root) {
43-
connect(root, 1);
44-
return root;
45-
}
46-
47-
private void connect(Node node, int level) {
48-
if (node == null) {
49-
return;
43+
if (root == null) {
44+
return null;
5045
}
5146

52-
if (prevs.size() < level) {
53-
prevs.add(node);
54-
} else {
55-
Node prev = prevs.get(level - 1);
56-
prev.next = node;
57-
prevs.set(level - 1, node);
47+
List<Node> nodes = new ArrayList<>();
48+
nodes.add(root);
49+
50+
while (nodes.size() > 0) {
51+
Node prev = null;
52+
List<Node> nextLevel = new ArrayList<>();
53+
for (Node node : nodes) {
54+
if (node.left != null) {
55+
nextLevel.add(node.left);
56+
}
57+
if (node.right != null) {
58+
nextLevel.add(node.right);
59+
}
60+
if (prev != null) {
61+
prev.next = node;
62+
}
63+
prev = node;
64+
}
65+
nodes = nextLevel;
5866
}
5967

60-
connect(node.left, level + 1);
61-
connect(node.right, level + 1);
68+
return root;
6269
}
6370

6471
public static void main(String[] args) {
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package problems.leetcode;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/submissions/
8+
*/
9+
public class PopulatingNextRightPointersInEachNodeII {
10+
11+
private static class Node {
12+
public int val;
13+
public Node left;
14+
public Node right;
15+
public Node next;
16+
17+
public Node() {
18+
}
19+
20+
public Node(int val) {
21+
this.val = val;
22+
}
23+
24+
public Node(int _val, Node _left, Node _right, Node _next) {
25+
val = _val;
26+
left = _left;
27+
right = _right;
28+
next = _next;
29+
}
30+
31+
@Override
32+
public String toString() {
33+
return "Node{" +
34+
"val=" + val +
35+
", next=" + next +
36+
'}';
37+
}
38+
}
39+
40+
// runtime: O(N)
41+
// space: O(N/2) which is actually O(N). N/2 is the number of nodes in the leaf level.
42+
public Node connect(Node root) {
43+
if (root == null) {
44+
return null;
45+
}
46+
47+
List<Node> nodes = new ArrayList<>();
48+
nodes.add(root);
49+
50+
while (nodes.size() > 0) {
51+
Node prev = null;
52+
List<Node> nextLevel = new ArrayList<>();
53+
for (Node node : nodes) {
54+
if (node.left != null) {
55+
nextLevel.add(node.left);
56+
}
57+
if (node.right != null) {
58+
nextLevel.add(node.right);
59+
}
60+
if (prev != null) {
61+
prev.next = node;
62+
}
63+
prev = node;
64+
}
65+
nodes = nextLevel;
66+
}
67+
68+
return root;
69+
}
70+
71+
public static void main(String[] args) {
72+
Node root = new Node(1);
73+
root.left = new Node(2);
74+
root.right = new Node(3);
75+
root.left.left = new Node(4);
76+
root.left.right = new Node(5);
77+
root.right.left = new Node(6);
78+
root.right.right = new Node(7);
79+
80+
Node newRoot = new PopulatingNextRightPointersInEachNode().connect(root);
81+
System.out.println();
82+
}
83+
84+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package problems.leetcode;
2+
3+
// https://leetcode.com/problems/sum-root-to-leaf-numbers/
4+
public class SumRootToLeafNumbers {
5+
6+
private static class TreeNode {
7+
int val;
8+
TreeNode left;
9+
TreeNode right;
10+
11+
TreeNode(int x) {
12+
val = x;
13+
}
14+
15+
@Override
16+
public String toString() {
17+
return "TreeNode{" + "val=" + val + '}';
18+
}
19+
}
20+
21+
private int sum;
22+
23+
// runtime: O(N)
24+
// space: O(H)
25+
public int sumNumbers(TreeNode root) {
26+
sumNumbers(root, 0);
27+
return sum;
28+
}
29+
30+
private void sumNumbers(TreeNode root, int parent) {
31+
if (root == null) {
32+
return;
33+
}
34+
35+
int num = parent * 10 + root.val;
36+
if (root.left == null && root.right == null) {
37+
sum += num;
38+
}
39+
40+
sumNumbers(root.left, num);
41+
sumNumbers(root.right, num);
42+
}
43+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package problems.leetcode;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
// https://leetcode.com/problems/time-needed-to-inform-all-employees/editorial/
7+
public class TimeNeededToInformAllEmployees {
8+
int maxTime = Integer.MIN_VALUE;
9+
10+
void DFS(List<List<Integer>> adjList, int[] informTime, int curr, int time) {
11+
// Maximum time for an employee to get the news.
12+
maxTime = Math.max(maxTime, time);
13+
14+
for (int adjacent : adjList.get(curr)) {
15+
// Visit the subordinate employee who gets the news after informTime[curr] unit
16+
// time.
17+
DFS(adjList, informTime, adjacent, time + informTime[curr]);
18+
}
19+
}
20+
21+
public int numOfMinutes(int n, int headID, int[] manager, int[] informTime) {
22+
List<List<Integer>> adjList = new ArrayList<>(n);
23+
24+
for (int i = 0; i < n; i++) {
25+
adjList.add(new ArrayList<Integer>());
26+
}
27+
28+
// Making an adjacent list, each index stores the Ids of subordinate employees.
29+
for (int i = 0; i < n; i++) {
30+
if (manager[i] != -1) {
31+
adjList.get(manager[i]).add(i);
32+
}
33+
}
34+
35+
DFS(adjList, informTime, headID, 0);
36+
return maxTime;
37+
}
38+
39+
}

0 commit comments

Comments
 (0)