一对比我就是个废物
思路:
1、构建父子节点关系 map
2、构建 o1 父节点 集合 set
3、o2的父节点是否在集合set中
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
//o1所在节点
private TreeNode n1;
//o2所在节点
private TreeNode n2;
//key = subNode ; value=parentNode
//子节点与父节点关系的map
private Map<TreeNode,TreeNode> map = new HashMap<>();
//n1所有的父节点集合
private Set<TreeNode> set = new HashSet<>();
/**
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
//构造子节点与父节点关系的map
map.put(root,null);
createMap(root,o1,o2);
//构造n1所有的父节点
set.add(n1);
while(map.get(n1)!=null){
set.add(map.get(n1));
n1 = map.get(n1);
}
//查找n2自身以及父节点是否是n1父节点中的一个
if(set.contains(n2)){
return n2.val;
}
while(map.get(n2)!=null){
if(set.contains(map.get(n2))){
return map.get(n2).val;
}
n2 = map.get(n2);
}
//返回根结点
return root.val;
}
public void createMap(TreeNode root, int o1, int o2){
if(root==null) return;
if(root.val==o1) n1 = root;
if(root.val==o2) n2 = root;
if(root.left!=null){
map.put(root.left,root);
createMap(root.left,o1,o2);
}
if(root.right!=null){
map.put(root.right,root);
createMap(root.right,o1,o2);
}
}
}
京公网安备 11010502036488号