236. 二叉树的最近公共祖先
题目:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
方法一:后续遍历
思路:利用后续遍历判断当前节点的左右子树是否包含目标结点,若包含,返回一个非空的对象,若是第一个结点,它的左右子树返回了非空,那么就返回这个结点,由于在未来的节点中,并不会再出现p和q,所以这第一个结点会一直返回,直到根节点。
/*** 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) {if(root===null){return null;}if(root===p || root===q){return root;}const left = lowestCommonAncestor(root.left,p,q);const right = lowestCommonAncestor(root.right,p,q);if(left!==null&&right!==null){return root;}else if(left!==null&&right===null){return left;}else{return right;}return null;};