面试题 04.03. 特定深度节点链表
题目
给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。
示例
输入:[1,2,3,4,5,null,7,8]
1
/ \
2 3
/ \ \
4 5 7
/
8
输出:[[1],[2,3],[4,5,7],[8]]
代码
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func listOfDepth(tree *TreeNode) []*ListNode {
if tree==nil{
return nil
}
var res []*ListNode
queue:=[]*TreeNode{tree}//创建队列,把头结点先放进去
for len(queue)>0{//队列中有元素
long:=len(queue)
prev:=&ListNode{Val:-1,Next:nil}
move:=prev
for i:=0;i<long;i++{
tmp:=&ListNode{Val:queue[i].Val,Next:nil}
move.Next=tmp
move=move.Next
if queue[i].Left!=nil{
queue=append(queue,queue[i].Left)
}
if queue[i].Right!=nil{
queue=append(queue,queue[i].Right)
}
}
//更新queue
queue=queue[long:]
res=append(res,prev.Next)
}
return res
}