Lowest Common Ancestor of a Binary Tree II
/**
* Definition of ParentTreeNode:
*
* class ParentTreeNode {
* public ParentTreeNode parent, left, right;
* }
*/
public class Solution {
/*
* @param root: The root of the tree
* @param A: node in the tree
* @param B: node in the tree
* @return: The lowest common ancestor of A and B
*/
public ParentTreeNode lowestCommonAncestorII(ParentTreeNode root, ParentTreeNode A, ParentTreeNode B) {
// write your code here
List<ParentTreeNode> pathA = getPath(A);
List<ParentTreeNode> pathB = getPath(B);
int indexA = pathA.size()-1;
int indexB = pathB.size()-1;
ParentTreeNode res = null;
while(indexA >= 0 && indexB >= 0){
if(pathA.get(indexA) != pathB.get(indexB)){
break;
}
res = pathA.get(indexA);
indexA--;
indexB--;
}
return res;
}
public List<ParentTreeNode> getPath(ParentTreeNode node){
List<ParentTreeNode> path = new ArrayList<>();
while(node != null){
path.add(node);
node = node.parent;
}
return path;
}
}Last updated