一.题目:
给定一个二叉树,我们需要从叶子节点开始将所有的叶子节点记录并剔除,然后重复记录新的叶子节点并剔除,如此往复直至二叉树为空树.
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
三.总结
这道题考察了二叉树的深度递归,需要熟练掌握此类递归逻辑
本文探讨了一种从二叉树的叶子节点开始,逐层移除并记录节点值直至树空的独特算法。通过深度优先搜索递归实现,详细介绍了如何获取节点深度并分层收集节点值,最后按深度顺序输出结果。
300

被折叠的 条评论
为什么被折叠?



