366. 寻找二叉树的叶子节点
难度中等209
给你一棵二叉树,请按以下要求的顺序收集它的全部节点:
依次从左到右,每次收集并删除所有的叶子节点
重复如上过程直到整棵树为空
示例:
输入: [1,2,3,4,5]
1
/ \
2 3
/ \
4 5
输出: [[4,5,3],[2],[1]]
解释:
1. 删除叶子节点 [4,5,3] ,得到如下树结构:
1
/
2
2. 现在删去叶子节点 [2] ,得到如下树结构:
1
3. 现在删去叶子节点 [1] ,得到空树:
[]
#解题思路:
1.hashmap + getheight function
2.对二叉树里面的每一个点进行get Height,每次会返回一个值
3.把高度相同的node存储到 hashmap 里面
4.最后输出hashmap里面所有存储的value,记得转换成list
#解题代码:
class Solution:
def findLeaves(self, root: Optional[TreeNode]) -> List[List[int]]:
# hashmap + getheight function
# 对二叉树里面的每一个点进行get Height,每次会返回一个值
# 把高度的值存储到 hashmap 里面
# height1 : 3,4,5
# height2 : 2
# height3 : 1
self.d = collections.defaultdict(list)
def getHeight(root):
if not root: return 0
left = getHeight(root.left)
right = getHeight(root.right)
cur_height = max(left, right) + 1
self.d[cur_height].append(root.val)
return cur_height
getHeight(root)
return list(self.d.values())
#时空复杂度:
时间:O(N) N为二叉树的节点数量
空间:O(N) N为哈希表的开销以及调用stack所需要的空间