填充每个节点的下一个右侧节点指针 II
package binarytree
func Connect(root *Node) *Node {
if root == nil {
return nil
}
q := []*Node{root}
for q != nil {
tmp := q
q = nil
for i, node := range tmp {
if i > 0 {
tmp[i-1].Next = node
}
if node.Left != nil {
q = append(q, node.Left)
}
if node.Right != nil {
q = append(q, node.Right)
}
}
}
return root
}
type Node struct {
Val int
Left *Node
Right *Node
Next *Node
}
func ConstructTree(nums []int) *Node {
if len(nums) == 0 {
return nil
}
root := &Node{Val: nums[0]}
queue := []*Node{root}
i := 1
for i < len(nums) {
node := queue[0]
queue = queue[1:]
if nums[i] != -1 {
node.Left = &Node{Val: nums[i]}
queue = append(queue, node.Left)
}
i++
if i < len(nums) && nums[i] != -1 {
node.Right = &Node{Val: nums[i]}
queue = append(queue, node.Right)
}
i++
}
return root
}