429. N 叉树的层序遍历(详细注释)

题目

给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
在这里插入图片描述
在这里插入图片描述

在树上使用队列的遍历算法的基本算法

List<Integer> values = new ArrayList<>(); //用于盛放按顺序拿出来的值
Queue<Node> queue = new LinkedList<>();
//用于盛放每一层的节点,队列存放节点。首先将根节点放到队列中,
//当队列不为空时,则在队列取出一个节点,并将其子节点添加到队列中
queue.add(root);//队列加入根节点
while (!queue.isEmpty()){
	Node nextNode = queue.remove();//remove()返回第一个元素,并在队列中将之删除,用于指定对哪个节点的子节点进行遍历
	values.add(nextNode.val);//将拿出来的队列中节点的值放入values数组中
	for(Node child : nextNode.children) { //循环用于按层序遍历顺序把节点放到队列中,这个循环可以用queue.addAll(nextNode.children)代替
		queue.add(child);
		}
}

对于此题的解法:除了上面的内容还需要把得到的values数组按层拆分开来

class Solution {
	public List<List<Integer>> levelOrder(Node root) {
		List<List<Integer>>result= new Arraylist<>();
		if (root == null) return result;
		Queue<Node> queue = new LinkedList<>();
		queue.add(root);
		while(!queue.isEmpty()){
			List<Integer> level = new ArrayList<>();//这个level指的是每一层里面遍历出来的数组。
			int size = queue.size();
			for (int i = 0;i<size;i++) {
				Node nextNode = queue.poll();//这里专门用poll方法替换了remove方法,从而在遍历queue为空的时候,刚好输出一个null
				level.add(node.val);
				queue.addAll(nextNode.children);
				}
				result.add(level);//循环完以后把每一层的数组加入到result数组中去。
		}
		return result;
}
}

题目地址:
429. N 叉树的层序遍历

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值