5128. 最深叶节点的最近公共祖先(二叉树)

给你一个有根节点的二叉树,找到它最深的叶节点的最近公共祖先。node

回想一下:this

  • 叶节点 是二叉树中没有子节点的节点
  • 树的根节点的 深度 为 0,若是某一节点的深度为 d,那它的子节点的深度就是 d+1
  • 若是咱们假定 A 是一组节点 S 的 最近公共祖先,s 中的每一个节点都在以 A 为根节点的子树中,且 A 的深度达到此条件下可能的最大值。

 

示例 1:spa

输入:root = [1,2,3]
输出:[1,2,3]

示例 2:code

输入:root = [1,2,3,4]
输出:[4]

示例 3:blog

输入:root = [1,2,3,4,5]
输出:[2,4,5]

 

提示:it

  • 给你的树中将有 1 到 1000 个节点。
  • 树中每一个节点的值都在 1 到 1000 之间。

 

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {TreeNode}
 */
var lcaDeepestLeaves = function(root) {
  let parent=null
  let maxLevel=0
  deep(root,0)
  return parent
  function deep(root,level){
    if(!root)return 0

    let left=deep(root.left,level+1)
    let right=deep(root.right,level+1)
    let max=Math.max(left,right)+1
    maxLevel=Math.max(maxLevel,level)
    if(left===right){
      if(level+left===maxLevel || max===maxLevel){
        parent=root
      }
    }
    return max
  }
};

解析:io

有必要深刻探讨function

相关文章
相关标签/搜索