Untitled
unknown
plain_text
10 months ago
1.4 kB
3
Indexable
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public class Solution {
public TreeNode lcaDeepestLeaves(TreeNode root) {
return findLCA(root).lca;
}
private Result findLCA(TreeNode node) {
if (node == null) return new Result(null, -1);
// Recur for left and right subtrees
Result left = findLCA(node.left);
Result right = findLCA(node.right);
// Determine the current depth
int currentDepth = Math.max(left.depth, right.depth) + 1;
// Determine the LCA based on subtree depths
if (left.depth == right.depth) {
return new Result(node, currentDepth);
} else if (left.depth > right.depth) {
return new Result(left.lca, currentDepth);
} else {
return new Result(right.lca, currentDepth);
}
}
// Helper class to store the LCA and depth
private static class Result {
TreeNode lca;
int depth;
Result(TreeNode lca, int depth) {
this.lca = lca;
this.depth = depth;
}
}
}
Editor is loading...
Leave a Comment