236. 二叉树的最近公共祖先
一、思想
思路详解1
思路详解2
二、代码实现
/**
* 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) {
// 1、递归函数
var travelTree = function(root,p,q){
// 2、递归结束的条件 / 最近公共祖先是root的一种情况
if(root == null || root == p || root == q) return root;
// 3、单层递归的逻辑 / 遍历左右子树
let left = travelTree(root.left,p,q);
let right = travelTree(root.right,p,q);
// 4、根据遍历结果确定最近公共祖先
if(right && left) return root;
if(right == null) return left;
if(left == null) return right;
}
// 调用递归函数,别忘了return
return travelTree(root,p,q);
};