NC102 在二叉树中找到两个节点的最近公共祖先

package NC;

/**
* NC102 在二叉树中找到两个节点的最近公共祖先
*
* 给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。
*
* 要求:空间复杂度O(1) ,时间复杂度O(n)
*
* @author Tang
* @date 2021/9/29
*/
public class LowestCommonAncestor {

int o1;

int o2;

int result = 0;

public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
// write code here
this.o1 = o1;
this.o2 = o2;
preSearch(root);
return result;
}

/**
* 前序遍历
* 根左右
* 判断其左右节点是否包含,如果有则根节点为最近祖先,
*
*
*
* @param node
* @return 当前节点的左子树包含几个元素
*/
private int preSearch(TreeNode node){
if(node == null) {
return 0;
}

int left = preSearch(node.left);
int right = preSearch(node.right);

if(left == 2) {
result = node.left.val;
return -1;
}

if(right == 2) {
result = node.right.val;
return -1;
}

//如果包含元素
if(left + right == 2) {
result = node.val;
return -1;
}

if(node.val == o1 || node.val == o2) {
return left + right +1;
}

return left + right;
}


public static void main(String[] args) {



}

}
posted @ 2021-09-29 13:26  六小扛把子  阅读(52)  评论(0编辑  收藏  举报