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

相關文章
相關標籤/搜索