website/content/ChapterFour/1100~1199/1123.Lowest-Common-Ancestor-of-Deepest-Leaves.md
Given a rooted binary tree, return the lowest common ancestor of its deepest leaves.
Recall that:
d, the depth of each of its children is d+1.S of nodes is the node A with the largest depth such that every node in S is in the subtree with root A.Example 1:
Input: root = [1,2,3]
Output: [1,2,3]
Explanation:
The deepest leaves are the nodes with values 2 and 3.
The lowest common ancestor of these leaves is the node with value 1.
The answer returned is a TreeNode object (not an array) with serialization "[1,2,3]".
Example 2:
Input: root = [1,2,3,4]
Output: [4]
Example 3:
Input: root = [1,2,3,4,5]
Output: [2,4,5]
Constraints:
给你一个有根节点的二叉树,找到它最深的叶节点的最近公共祖先。
回想一下:
提示:
package leetcode
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func lcaDeepestLeaves(root *TreeNode) *TreeNode {
if root == nil {
return nil
}
lca, maxLevel := &TreeNode{}, 0
lcaDeepestLeavesDFS(&lca, &maxLevel, 0, root)
return lca
}
func lcaDeepestLeavesDFS(lca **TreeNode, maxLevel *int, depth int, root *TreeNode) int {
*maxLevel = max(*maxLevel, depth)
if root == nil {
return depth
}
depthLeft := lcaDeepestLeavesDFS(lca, maxLevel, depth+1, root.Left)
depthRight := lcaDeepestLeavesDFS(lca, maxLevel, depth+1, root.Right)
if depthLeft == *maxLevel && depthRight == *maxLevel {
*lca = root
}
return max(depthLeft, depthRight)
}