N叉树的层序遍历
2019-07-04 本文已影响0人
习惯了_就好
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
例如,给定一个 3叉树 :
图片.png
返回其层序遍历:
[
[1],
[3,2,4],
[5,6]
]
说明:
树的深度不会超过 1000。
树的节点总数不会超过 5000。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val,List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
List<List<Integer>> result = new ArrayList<List<Integer>>();
public List<List<Integer>> levelOrder(Node root) {
doHandle(root,0);
return result;
}
private void doHandle(Node root,int leval){
if(root == null){//递归结束条件
return;
}
List<Integer> list;
if(leval < result.size()){//最终大数组里已经有这一层的节点了,就把存放该层节点的数组取出来,也放到该数组中
list = result.get(leval);
list.add(root.val);
} else {//最终大数组里还没有这一层的节点,就new一个出来,将节点放进去,并把该数组放到最终节点中
list = new ArrayList<Integer>();
list.add(root.val);
result.add(list);
}
List<Node> children = root.children;
int childrenLength = children.size();
for(int i = 0; i < childrenLength; i++){//每一个子节点都执行上面的操作
doHandle(children.get(i), leval + 1);
}
}
}