LCA IV
Last updated
Last updated
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root == null) return root;
if (root.val == p.val) return p;
if (root.val == q.val) return q;
HashMap<TreeNode, Integer> map = new HashMap<TreeNode, Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode cur = root;
int index = 0;
while (cur != null || !stack.isEmpty()) {
while(cur != null) {
stack.push(cur);
cur = cur.left;
}
TreeNode node = stack.pop();
map.put(node, index++);
cur = node.right;
}
return getLCA(root, p, q, map);
}
private TreeNode getLCA(TreeNode root, TreeNode p, TreeNode q, HashMap<TreeNode, Integer> map){
if (root == null) return root;
if (root.val == p.val) return p;
if (root.val == q.val) return q;
while (root != null) {
if (map.get(q) < map.get(root) && map.get(p) < map.get(root)) {
root = root.left;
} else if (map.get(q) > map.get(root) && map.get(p) > map.get(root)) {
root = root.right;
} else {
break;
}
}
return root;
}