题目
思路
分别找到两个节点,记录在找到两个节点的过程中经过的路径。比较路径,找到最后一个相同的节点。
代码
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @param {TreeNode} p
* @param {TreeNode} q
* @return {TreeNode}
*/
var lowestCommonAncestor = function(root, p, q) {
var find = function(root, target){
let cur = root;
let path = [];
while(cur.val != target.val){
path.push(cur);//注意这个地方需要把头节点先push进去
if (cur.val > target.val){
cur = cur.left;
}else{
cur = cur.right;
}
}//这道题是一定会找到的,所以不考虑指针到null的情况
path.push(cur);
return path;
}
let pathP = find(root, p);
let pathQ = find(root, q);
let i = 0;
while(pathP[i] == pathQ[i]){
i++;
}
return pathP[i - 1];
};