Given a binary tree, collect a tree's nodes as if you were doing this: Collect and remove all leaves, repeat until the tree is empty.
Example:
Given binary tree
1 / \ 2 3 / \ 4 5
Returns [4, 5, 3], [2], [1]
.
Explanation:
1. Removing the leaves [4, 5, 3]
would result in this tree:
1 / 2
2. Now removing the leaf [2]
would result in this tree:
1
3. Now removing the leaf [1]
would result in the empty tree:
[]
Returns [4, 5, 3], [2], [1]
.
很有意思的一道题,主要是一步一步去除叶子结点,然后返回结果。其实这题考的是二叉树结点的高度。高度最低的先输出,同等高度的一块输出。略微修改下递归球二叉树高度的方法就可以,同时可以根据高度,确定加结果的地方。空间复杂度O(logn),时间复杂度位O(n),每个节点都需要处理一次。代码如下:
class Solution(object): def findLeaves(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ if not root: return [] res = [] self.dfs(root, res) return res def dfs(self, root, res): if not root: return -1 left = self.dfs(root.left, res) right = self.dfs(root.right, res) level = max(left, right) + 1 if len(res) == level: res.append([root.val]) else: res[level].append(root.val) root.left = root.right = None return level