mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-25 03:11:41 +08:00
53 lines
873 B
Go
53 lines
873 B
Go
package leetcode
|
|
|
|
type Node struct {
|
|
Val int
|
|
Left *Node
|
|
Right *Node
|
|
Next *Node
|
|
}
|
|
|
|
//解法一:迭代
|
|
func connect(root *Node) *Node {
|
|
if root == nil {
|
|
return root
|
|
}
|
|
q := []*Node{root}
|
|
for len(q) > 0 {
|
|
var p []*Node
|
|
// 遍历这一层的所有节点
|
|
for i, node := range q {
|
|
if i+1 < len(q) {
|
|
node.Next = q[i+1]
|
|
}
|
|
if node.Left != nil {
|
|
p = append(p, node.Left)
|
|
}
|
|
if node.Right != nil {
|
|
p = append(p, node.Right)
|
|
}
|
|
}
|
|
q = p
|
|
}
|
|
return root
|
|
}
|
|
|
|
// 解法二 递归
|
|
func connect2(root *Node) *Node {
|
|
if root == nil {
|
|
return nil
|
|
}
|
|
connectTwoNode(root.Left, root.Right)
|
|
return root
|
|
}
|
|
|
|
func connectTwoNode(node1, node2 *Node) {
|
|
if node1 == nil || node2 == nil {
|
|
return
|
|
}
|
|
node1.Next = node2
|
|
connectTwoNode(node1.Left, node1.Right)
|
|
connectTwoNode(node2.Left, node2.Right)
|
|
connectTwoNode(node1.Right, node2.Left)
|
|
}
|