题解 | #二叉搜索树的最近公共祖先#
二叉搜索树的最近公共祖先
https://www.nowcoder.com/practice/d9820119321945f588ed6a26f0a6991f
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 int lowestCommonAncestor (TreeNode root, int p, int q) { // write code here //从根节点开始找,分别找到p,q同时收集路径上的元素。最后遍历集合中的元素就可以找到最近公共祖先 ArrayList<Integer> list1 = new ArrayList<>(); ArrayList<Integer> list2 = new ArrayList<>(); TreeNode temp2 =root; TreeNode temp =root; getPath(temp,list1,p); getPath(temp2,list2,q); int ans =0; for(int i =0;i<list1.size()&&i<list2.size();i++){ //必须要声明变量才能比较???? list1.get(i)==list.get(i)通不过????? int x =list1.get(i); int y = list2.get(i); if(x==y) { ans = list1.get(i); }else break; } return ans; } public void getPath(TreeNode root,ArrayList<Integer> list,int target){ // if(root==null) return; while(root.val!=target){ list.add(root.val); if(root.val<target){ root = root.right; }else{ root = root.left; } } list.add(root.val); } }