[leetcode] 366. Find Leaves of Binary Tree @ python

本文探讨了一种从二叉树的叶子节点开始,逐层移除并记录节点值直至树空的独特算法。通过深度优先搜索递归实现,详细介绍了如何获取节点深度并分层收集节点值,最后按深度顺序输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.题目:
给定一个二叉树,我们需要从叶子节点开始将所有的叶子节点记录并剔除,然后重复记录新的叶子节点并剔除,如此往复直至二叉树为空树.
Example:
Input: [1,2,3,4,5]

      1
     / \
    2   3
   / \     
  4   5    

二.解题思路:
涉及到树,多半是要用到递归,这里我们需要设计一个递归函数,函数的输入是一个节点,分别求得该节点的左子节点和右子节点的深度,然后取较大值+1即为当前节点的深度.递归出口为当前节点不存在时返回深度0,所以深度为0的节点都是叶子节点.
具体代码如下:

def getLevel(root, dicts):
            if not root:
                return 0
            left = getLevel(root.left, d)
            right = getLevel(root.right, d)
            level = 1 + max(left, right)
            dicts[level].append(root.val)
            return level

通过递归统计到所有节点的深度及其对应的值后,我们可以遍历字典,得到结果
整体代码如下:

class Solution:
    def findLeaves(self, root: 'TreeNode') -> 'List[List[int]]':
        def getLevel(root, d):
            if not root:
                return 0
            left = getLevel(root.left, d)
            right = getLevel(root.right, d)
            level = 1 + max(left, right)
            d[level].append(root.val)
            return level
        
        dicts = collections.defaultdict(list)
        getLevel(root, dicts)
        result = []
        for k in sorted(d.keys()):
            res.append(d[k])
        return result

三.总结
这道题考察了二叉树的深度递归,需要熟练掌握此类递归逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值