Java/429. N-ary Tree Level Order Traversal N叉树的层序遍历

本文介绍两种实现二叉树层次遍历的算法,一种使用队列进行广度优先搜索,另一种采用递归方式进行宽度优先搜索。前者通过队列记录每一层节点,后者则直接在递归过程中记录各层次节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目


 

 

代码部分一(9ms)

class Solution {
    List<List<Integer>> res = new ArrayList<List<Integer>>();
    public List<List<Integer>> levelOrder(Node root) {
        if(root == null)
            return res;
        List<Integer> list = new ArrayList();
        Queue<Node> queue = new LinkedList();
        queue.add(root);
        int size = queue.size();
        while(!queue.isEmpty()){
            Node temp = queue.poll();
            list.add(temp.val);
            for(Node node : temp.children){
                queue.add(node);
            }
            size--;
            if(size == 0){
                size = queue.size();
                res.add(list);
                list = new ArrayList();
            }
            
        }
        return res;
    }
}
  1. 若树为空,返回 null

  2. 创建队列 queue ,并将根节点 root 入队,获得队列长度 size

  3. 当队列不为空时,取出(会删除)队首节点,将其值加入 list ,并将取出节点的子节点(下一层节点)入队

  4. 若当前层的节点是否都遍历完了,将新队列长度赋予size , 将 list 加入res,初始化 list

  5. 返回 res

 

代码部分二(5ms)

class Solution {
    List<List<Integer>> res = new ArrayList<List<Integer>>();
    public List<List<Integer>> levelOrder(Node root) {
        bfs(root, 0);
        return res;

    }
    public void bfs(Node root, int level){
        if(null == root)
            return;
        if(level == res.size())
            res.add(new ArrayList());
        res.get(level).add(root.val);
        for(Node node : root.children)
            bfs(node, level+1);
    }
}
  1. 调用宽度遍历 bfs()

  2. 若当前节点为空,结束遍历

  3. 判断当前层次是否有记录,若无,创建新 list

  4. 将当前节点值加入到对应层次中

  5. 继续遍历子节点

  6. 返回 res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值