【题目】
给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。
示例:
输入:[1,2,3,4,5,null,7,8]
1
/ \
2 3
/ \ \
4 5 7
/
8
输出:[[1],[2,3],[4,5,7],[8]]
【代码】
class Solution:
def listOfDepth(self, tree: TreeNode) -> List[ListNode]:
if not tree:
return []
ans=[]
queue=[tree]
while queue:
sz=len(queue)
temp=None
rear=None
for _ in range(sz):
tree=queue.pop(0)
if not temp:
temp=rear=ListNode(tree.val)
else:
rear.next=ListNode(tree.val)
rear=rear.next
if tree.left:
queue.append(tree.left)
if tree.right:
queue.append(tree.right)
ans.append(temp)
return ans
【方法2:递归】
class Solution:
def listOfDepth(self, root: TreeNode) -> List[ListNode]:
ans = []
def dfs(node, level):
if not node: return None
if len(ans) == level:
ans.append(ListNode(node.val))
else:
head = ListNode(node.val)
head.next = ans[level]
ans[level] = head
dfs(node.right, level + 1)
dfs(node.left, level + 1)
dfs(root, 0)
return ans
【写法3】
class Solution:
def dfs(self,root,level):
if not root:
return
# print(self.ans)
if len(self.ans)<level:
self.ans.append(ListNode(root.val))
else:
node=ListNode(root.val)
node.next=self.ans[level-1]
self.ans[level-1]=node
self.dfs(root.right,level+1)
self.dfs(root.left,level+1)
def listOfDepth(self, tree: TreeNode) -> List[ListNode]:
if not tree:
return []
self.ans=[]
self.dfs(tree,1)
return self.ans