📅  最后修改于: 2023-12-03 14:58:31.881000             🧑  作者: Mango
本题是GATE-CS-2017(套装1)的第36题,是一道需要对二叉树进行操作的题目,需要完成以下任务:
下面是本题的代码实现:
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def findLeaves(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
res = []
self.helper(root, res)
return res
def helper(self, root, res):
if not root:
return -1
left = self.helper(root.left, res)
right = self.helper(root.right, res)
level = max(left, right) + 1
if len(res) < level + 1:
res.append([])
res[level].append(root.val)
root.left = root.right = None
return level
该算法的时间复杂度为O(N),其中N是二叉树中节点的数量。空间复杂度为O(N),因为需要存储深度为每个叶子节点的列表。
具体操作过程如下:
因为二叉树的遍历是递归进行的,所以算法的时间复杂度是O(N),空间复杂度是O(N)。