leetcode 116
https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/
// BFS 实现func connect(root *Node) *Node {if root == nil {return root}roott := rootqueue := []*Node{}queue = append(queue,roott)for len(queue) >0 {length := len(queue)for length > 0 {length--roott = queue[0]queue = queue[1:]if roott.Left !=nil {queue = append(queue,roott.Left)}if roott.Right != nil {queue = append(queue,roott.Right)}if length ==0 {roott.Next = nil} else {roott.Next = queue[0]}}}return root}// 递归func connect(root *Node) *Node {if root == nil {return nil}l := root.Leftr := root.Rightfor l != nil {l.Next = r //连接l = l.Right //往右r = r.Left //往左}connect(root.Left)connect(root.Right)return root}//迭代 空间复杂度O(1)func connect(root *Node) *Node {if root == nil {return nil}cur := rootfor cur != nil {dummy := &Node{} // 创建哑节点pre := dummyfor cur != nil {if cur.Left != nil {pre.Next = cur.Leftpre = pre.Next}if cur.Right != nil {pre.Next = cur.Rightpre = pre.Next}cur = cur.Next}cur = dummy.Next}return root}// 迭代 左节点向右,右节点向左func connect(root *Node) *Node {if root == nil {return nil}pre := rootfor pre.Left != nil {parent := prefor parent != nil {parent.Left.Next = parent.Right //左节点连接右节点if parent.Next != nil {parent.Right.Next = parent.Next.Left //右节点 连接 邻居左节点}parent = parent.Next //同层移动}pre = pre.Left //移到下层}return root}
leetcode 117
https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/
// BFS
func connect(root *Node) *Node {
if root == nil {
return nil
}
roott := root
queue := []*Node{}
queue = append(queue,roott)
for len(queue) >0 {
length := len(queue)
for length >0 {
length--
cur := queue[0]
queue = queue[1:]
if cur.Left != nil {
queue = append(queue,cur.Left)
}
if cur.Right != nil {
queue = append(queue,cur.Right)
}
if length >0 {
cur.Next = queue[0]
}
}
}
return root
}
//迭代
func connect(root *Node) *Node {
if root == nil {
return nil
}
cur := root
for cur != nil {
dummy := &Node{}
pre := dummy
for cur != nil {
if cur.Left != nil {
pre.Next = cur.Left
pre = pre.Next
}
if cur.Right != nil {
pre.Next = cur.Right
pre = pre.Next
}
cur = cur.Next
}
cur = dummy.Next
}
return root
}
