题解 | #在二叉树中找到两个节点的最近公共祖先#
在二叉树中找到两个节点的最近公共祖先
http://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116
```/*
* function TreeNode(x) {
* this.val = x;
* this.left = null;
* this.right = null;
* }
*/
/**
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
function lowestCommonAncestor( root , o1 , o2 ) {
// write code here
//与JZ68区别:二叉树不同于二叉搜素树,其值没有规律。
if(root===null){return null}
if(root.val===o1){return root.val} //查找到o1节点 返回值
if(root.val===o2){return root.val} //查找到o2节点 返回值
let left = lowestCommonAncestor( root.left , o1 , o2 ) //left记录左边子树寻找的结果
let right = lowestCommonAncestor( root.right , o1 , o2 ) //right记录右边子树寻找的结果
//如果o1、o2在两侧,对于栈顶的当前函数root的left和right都有值
if(left&&right){return root.val}
//如果单侧有值,返回这个值,如果到最后没有经历上面一行的代码,说明这个值就是最近公共祖先
if(left){return left}
if(right){return right}
}
module.exports = {
lowestCommonAncestor : lowestCommonAncestor
};