描述
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @param p int整型
* @param q int整型
* @return int整型
*/
public ArrayList<Integer> getpath(TreeNode root,int target){
ArrayList<Integer> path=new ArrayList<Integer>();
TreeNode node=root;
while(node.val!=target){
path.add(node.val);
if(target<node.val){
node=node.left;
}else{node=node.right;}
}path.add(node.val);
return path;
}
public int lowestCommonAncestor (TreeNode root, int p, int q) {
// write code here、
ArrayList<Integer>path_p=new ArrayList<Integer>();
ArrayList<Integer>path_q=new ArrayList<Integer>();
path_p=getpath(root,p);
path_q=getpath(root,q);
int res=0;
for(int i=0;i<path_p.size()&&i<path_q.size();i++){
int x=path_p.get(i);
int y=path_q.get(i);
if(x==y){
res=x;
}else
break;
}return res;
}
}
在这里插入代码片
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 boolean flag=false;
public void dfs(TreeNode root,ArrayList<Integer>path,int o){
if(flag||root==null){return;}
path.add(root.val);
if(root.val==o){
flag=true;
return;
}
dfs(root.left,path,o);
dfs(root.right,path,o);
if(flag){return;
}path.remove(path.size()-1);
}
public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
// write code here
ArrayList<Integer> path1=new ArrayList<Integer>();
ArrayList<Integer> path2=new ArrayList<Integer>();
dfs(root,path1,o1);
flag=false;
dfs(root,path2,o2);
int res=0;
for(int i=0;i<path1.size()&&i<path2.size();i++){
int x=path1.get(i);
int y=path2.get(i);
if(x==y){
res=x;
}else break;
}return res;
}
}
描述
给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。