填充每个节点的下一个右侧节点指针 II

填充每个节点的下一个右侧节点指针 II

在这里插入图片描述

// 填充每个节点的下一个右侧节点指针II
package binarytree

/*
算法如下:初始化一个队列 q,将根结点放入队列中。当队列不为空的时候,
记录当前队列大小为 n,从队列中以此取出 n 个元素并通过这 n 个元素拓展新节点。
如此循环,直到队列为空

作者:力扣官方题解
链接:https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/solutions/429828/tian-chong-mei-ge-jie-dian-de-xia-yi-ge-you-ce-15/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
*/
// 灵茶山艾府
// 方法二: BFS
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
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值