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) }