https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。
var lowestCommonAncestor = function(root, p, q) {
//先遍历整个树,把每个节点的父节点站出来
let map=new Map()
function dfs(root){
if(root.left){
map.set(root.left.val,root)
dfs(root.left)
}
if(root.right){
map.set(root.right.val,root)
dfs(root.right)
}
}
dfs(root)
let visitedNodeList=[]
//从目标节点p往父节点遍历
while(p){
visitedNodeList.push(p)
p=map.get(p.val)
}
//从目标节点q往父节点遍历
while(q){
if(visitedNodeList.includes(q)){
return q
}
q=map.get(q.val)
}
return null
};