一对比我就是个废物
思路:
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); } } }