工作生活LeetCode

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);
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读