LCA of Binary Tree
unknown
java
10 months ago
1.8 kB
13
Indexable
// Definition for a binary tree node
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
left = null;
right = null;
}
}
public class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
// Base Case: If root is null or matches p or q, return root
if (root == null || root == p || root == q) {
return root;
}
// Recur for left and right subtrees
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
// If one node is found in left subtree and one in right, root is LCA
if (left != null && right != null) {
return root;
}
// Otherwise, return non-null node
return (left != null) ? left : right;
}
public static void main(String[] args) {
// Constructing the Binary Tree
TreeNode root = new TreeNode(3);
root.left = new TreeNode(5);
root.right = new TreeNode(1);
root.left.left = new TreeNode(6);
root.left.right = new TreeNode(2);
root.right.left = new TreeNode(0);
root.right.right = new TreeNode(8);
root.left.right.left = new TreeNode(7);
root.left.right.right = new TreeNode(4);
Solution sol = new Solution();
TreeNode p = root.left; // Node with value 5
TreeNode q = root.right; // Node with value 1
TreeNode lca = sol.lowestCommonAncestor(root, p, q);
System.out.println("Lowest Common Ancestor of " + p.val + " and " + q.val + " is: " + lca.val);
}
}
Editor is loading...
Leave a Comment