寻找最近的公共祖先节点:则只会出现三种情况才返回对当前节点
- 1.当前节点为o1,o2中的一个,且另一个在其左子树中
- 2.当前节点为o1,o2中的一个,且另一个在其右子树中
- 3.当前节点不为o1,o2任一一个,但是o1,o2分别存在于其左右子树中
那么我们在判断当前节点是否是需要返回的就只需要以下步骤:- 1.判断目标节点在左右子树中是否存在
- 2.根据左右子树返回的情况,判断属于前面三种情况的哪一种
- 3.如果不是当前节点,则需要判断接下来进入哪一个节点
具体代码如下
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
// write code here
//当前节点分别求出左右子树是否存在目标节点
boolean left = search(root.left,o1,o2);
boolean right = search(root.right,o1,o2);
if(left && right){
return root.val;
}else{
if(root.val == o1 || root.val == o2){
return root.val;
}else{
return left == true ? lowestCommonAncestor(root.left,o1,o2) : lowestCommonAncestor(root.right,o1,o2);
}
}
}
//定义方法,返回当前节点下,是否存在指定值得节点
public boolean search(TreeNode root,int target1,int target2){
if(root == null)return false;
if(root.val == target1 || root.val == target2)return true;
return search(root.right,target1,target2) || search(root.left,target1,target2);
}
}
京公网安备 11010502036488号