Lowest Common Ancestor III
public class Solution {
/*
* @param root: The root of the binary tree.
* @param A: A TreeNode
* @param B: A TreeNode
* @return: Return the LCA of the two nodes.
*/
class resultType{
boolean A, B;
TreeNode LCA;
resultType(boolean A, boolean B, TreeNode LCA){
this.A = A;
this.B = B;
this.LCA = LCA;
}
}
public TreeNode lowestCommonAncestor3(TreeNode root, TreeNode A, TreeNode B) {
// write your code here
resultType res = find(root, A, B);
TreeNode LCA = res.LCA;
return LCA;
}
private resultType find(TreeNode root, TreeNode A, TreeNode B){
resultType res = new resultType(false, false, null);
if(root == null){
return res ;
}
resultType left = find(root.left, A, B);
resultType right = find(root.right, A, B);
if(left.LCA != null){
res.LCA = left.LCA;
return res;
}
if(right.LCA != null){
res.LCA = right.LCA;
return res;
}
res.A = left.A | right.A | root == A;
res.B = left.B | right.B | root == B;
if(res.A && res.B ){
res.LCA = root;
return res;
}
return res;
}
}
最后更新于
这有帮助吗?