366. 寻找⼆叉树的叶⼦节点

366. 寻找⼆叉树的叶⼦节点

这道题混用二叉树递归 「遍历」和「分解问题」 两种思维模式。

class FindLeaves:
    """
    366. 寻找⼆叉树的叶⼦节点
    https://leetcode.cn/problems/find-leaves-of-binary-tree/
    """
    def solution(self, root):
        self.res = []
        self.traverse(root)
        return self.res

    # 定义:输⼊节点 root,返回以 root 为根的树的最⼤深度
    def traverse(self, root):
        if not root:
            return 0

        left_height = self.traverse(root.left)
        right_height = self.traverse(root.right)

        # 当前节点距离叶⼦节点的⾼度(最⼤深度)
        h = max(left_height, right_height) + 1

        if len(self.res) < h:
            self.res.append([])

        self.res[h-1].append(root.val)

        return h
        

你可能感兴趣的:(LeetCode,数据结构与算法,二叉树)