思路:创建一个hashmap中 k为当前节点, v为该节点的祖先
然后创建一个set 里面存放 第一节点的所有父节点
最后在set中找第二个节点的父节点
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
HashMap<Integer,Integer> parents = new HashMap<>();
parents.put(root.val,Integer.MIN_VALUE);//初始化根节点
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!parents.containsKey(p)||!parents.containsKey(q)){
TreeNode node = queue.poll();
if(node.left!=null){
queue.add(node.left);
parents.put(node.left.val,node.val);
}
if(node.right!=null){
queue.add(node.right);
parents.put(node.right.val,node.val);
}
}
HashSet<Integer> set = new HashSet<>();
while(parents.containsKey(p)){
set.add(p);
p=parents.get(p);
}
while(!set.contains(q)){
q= parents.get(q);
}
return q;
}
}
|