内容简介:对N叉树进行水平遍历,并输出每一行遍历的结果。这个和一般的水平遍历有所区别,因为它会记录每一行的水平遍历结果分别存在结果数组相应行。因此首先可以用水平遍历的通用解法,即队列的方式,进行解决:
题目要求
Given an n-ary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level). For example, given a 3-ary tree:
We should return its level order traversal:
[
[1],
[3,2,4],
[5,6]
]
Note:
The depth of the tree is at most 1000.
The total number of nodes is at most 5000.
对N叉树进行水平遍历,并输出每一行遍历的结果。
思路和代码
这个和一般的水平遍历有所区别,因为它会记录每一行的水平遍历结果分别存在结果数组相应行。因此首先可以用水平遍历的通用解法,即队列的方式,进行解决:
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if(root != null) {
LinkedList<Node> queue = new LinkedList<Node>();
queue.offer(root);
//下一行的元素数量
int next = 1;
List<Integer> levelOrderPerHeight = new ArrayList<Integer>();
while(!queue.isEmpty()) {
next--;
Node tmp = queue.poll();
levelOrderPerHeight.add(tmp.val);
if(tmp.children != null && !tmp.children.isEmpty()) {
for(Node child : tmp.children) {
queue.offer(child);
}
}
//当前行遍历完成,则更新当前行
if(next == 0) {
result.add(levelOrderPerHeight);
levelOrderPerHeight = new ArrayList<Integer>();
next = queue.size();
}
}
}
return result;
}
上面的实现中使用next值来记录下一行的元素的个数。但是其实因为结果是采用List<List>的形式来记录的,也就是第i层的水平遍历的结果会记录于数组下标i-1的位置上。因此无需再用队列来额外存储每一行的水平遍历,可以直接通过递归将遍历结果插入到相应行的结果集中。
public List<List<Integer>> levelOrder2(Node root) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
levelOrder(root, result, 0);
return result;
}
public void levelOrder(Node root, List<List<Integer>> result, int level) {
if(root == null) return;
if(level == result.size()) {
result.add(new ArrayList<>());
}
List<Integer> tmp = result.get(level);
tmp.add(root.val);
for(Node child : root.children) {
levelOrder(child, result, level+1);
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- leetcode429. N-ary Tree Level Order Traversal
- LeetCode 429 N-ary Tree Level Order Traversal
- Leetcode PHP题解--D55 429. N-ary Tree Level Order Traversal
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
信息检索导论
Christopher D.Manning、Hinrich Schütze、Prabhakar Raghavan / 王斌 / 人民邮电出版社 / 201008 / 69.00元
封面图片为英国伯明翰塞尔福瑞吉百货大楼,其极具线条感的轮廓外型优美,犹如水波的流动。其外表悬挂了1.5万个铝碟,创造出一种极具现代气息的纹理装饰效果,有如夜空下水流的波光粼粼,闪烁于月光之下,使建筑的商业氛围表现到极致。设计该建筑的英国“未来系统建筑事物所”,将商场内部围合成一个顶部采光的中庭,配以交叉的自动扶梯,使购物环境呈现出一种凝聚的向心力和商业广告的展示效应。作为英国第二商业城市伯明翰的建......一起来看看 《信息检索导论》 这本书的介绍吧!