/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func findLeaves(root *TreeNode) [][]int {
if root == nil {
return nil
}
res := make([][]int,0)
var traverse func(root *TreeNode) int
traverse = func(root *TreeNode) int{
if root == nil {
return 0
}
lh := traverse(root.Left)
rh := traverse(root.Right)
h := max(lh,rh)
if len(res) <= h {
res = append(res, make([]int,0))
}
res[h] = append(res[h], root.Val)
return h+1
}
traverse(root)
return res
}
func max(a, b int) int { if a < b { return b }; return a }
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def findLeaves(self, root: TreeNode) -> List[List[int]]:
# 自底向上递归
def dfs(root):
if not root:return 0
l,r=dfs(root.left),dfs(root.right)
depth=max(l,r)+1
res[depth].append(root.val)
return depth
res=collections.defaultdict(list)
dfs(root)
return [v for v in res.values()]