栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

二叉树的最大深度-广度优先(java实现)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二叉树的最大深度-广度优先(java实现)

二叉树基本的广度优先算法是借助队列的先入先出特点实现二叉树的广度优先算法,即一层一层的遍历二叉树,因此广度优先也是层序遍历,但是求取二叉树的深度,需要将二叉树的广度优先算法做一些修改,普通的广度优先算法是队列元素出队后就直接将当前节点元素的左右节点加入队列的尾部,而求深度则需要将一层的元素都弹出才能算是一层深度,因此借助一个临时集合保存当前层所有弹出的元素,弹出完之后在将集合中元素的子节点加入队列继续进行,java实现:

    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        Queue nodeQueue=new LinkedList<>();  //广度优先队列
        nodeQueue.offer(root);   //根节点入队列
        int depth=0;
        while (!nodeQueue.isEmpty()){
            List pollNodeList=new ArrayList<>();  //临时list,保存当前层的所有节点,便于后续一次性加入当前层节点的子节点
            while (!nodeQueue.isEmpty()){
                pollNodeList.add(nodeQueue.poll());  //循环弹出当前层的所有节点,并加入临时list
            }
            depth++;  //每一层深度+1
            pollNodeList.forEach(treeNode -> {    //将当前层的所有节点的子节点加入队列
                if (treeNode.left!=null){
                    nodeQueue.offer(treeNode.left);
                }
                if (treeNode.right!=null){
                    nodeQueue.offer(treeNode.right);
                }
            });

        }
        return depth;  //返回深度
    }

时间复杂度:O(n),其中 n 为二叉树的节点个数,每个节点均访问一次。

空间复杂度:此方法空间的消耗取决于队列存储的元素数量,其在最坏情况下会达到 O(n)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/825886.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号