366. Find Leaves of Binary Tree

Level traversal 是把层级从上往下传递,这个按高度记录节点 height traversal(或者说计算节点到叶子节点的距离)是把高度从下往上传递,iterative就比较麻烦,借助recursive会比较方便地写出来。

叶子节点高度为1,往上每个节点的高度都取左右子树较大值+1,一边递归一边记录。

class Solution(object):
    def findLeaves(self, root):
        def postorder(root, res):
            if not root: return 0
            height = max(postorder(root.left, res), postorder(root.right, res))+1
            res[height].append(root.val)
            return height
        res = collections.defaultdict(list)
        postorder(root, res)
        return res.values()

Last updated

Was this helpful?