Skip to content

Commit 3f7289d

Browse files
committed
Leetcode 865 Smallest Subtree with all the Deepest Nodes
1 parent bc88ad2 commit 3f7289d

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class Solution {
2+
private List<TreeNode> list = new ArrayList<>();
3+
private int deepestLevel = 0;
4+
5+
public TreeNode subtreeWithAllDeepest(TreeNode root) {
6+
if(root == null) return null;
7+
getDeepestNodes(root,1);
8+
return lowerestCommenAncestor(root, list);
9+
}
10+
11+
private void getDeepestNodes(TreeNode node, int level) {
12+
if(node == null) return;
13+
if(level >= deepestLevel) {
14+
if(level > deepestLevel){
15+
list.clear();
16+
deepestLevel = level;
17+
}
18+
list.add(node);
19+
}
20+
getDeepestNodes(node.left, level+1);
21+
getDeepestNodes(node.right, level+1);
22+
23+
}
24+
25+
private TreeNode lowerestCommenAncestor(TreeNode node, List<TreeNode> list) {
26+
if(node == null) return null;
27+
for(TreeNode n : list) {
28+
if(node == n) return node;
29+
}
30+
TreeNode left = lowerestCommenAncestor(node.left, list);
31+
TreeNode right = lowerestCommenAncestor(node.right, list);
32+
if(left != null && right != null) {
33+
return node;
34+
}else if(left != null){
35+
return left;
36+
}else{
37+
return right;
38+
}
39+
}
40+
}

0 commit comments

Comments
 (0)