二叉树的深度_计算二叉树最大深度

f5de6b6a68d04ba1659f9214331e26bf.gif

        给定一个二叉树,找出其最大深度,二叉树的深度为根节点到最远叶子节点的最长路径上的节点数,时间复杂度为O(n²)

        TreeNode节点结构

class TreeNode {    int val;    TreeNode left;    TreeNode right;    TreeNode(int x) {        val = x;    }}

        使用两个队列交替储存每一层二叉树节点,当上层为空时总层数加1

public static int maxDepth(TreeNode root) {        if (root==null){            return 0;        }        int crr=1;//根节点不为空 默认为一层        if (root!=null){            crr = 1;        }        if (root.right==null&&root.left==null)return 1;        Queue queueP =  new LinkedList();//放置上层元素队列        Queue queueC =  new LinkedList();//放置下层元素队列        queueP.add(root);        while (!queueP.isEmpty()) {//遍历一层 把下一层元素放在下层队列            TreeNode poll = (TreeNode) queueP.poll(); //出队一个            if (poll.right != null) {                queueC.add(poll.right);            }            if (poll.left != null) {                queueC.add(poll.left);            }            if (queueP.isEmpty()){//当上层队列为空时 把下层队列赋值给上层                crr++;//记录二叉树层数                t(queueC,queueP);            }        }        return crr;    }    static void t(Queue queueC,Queue queueP){        while (!queueC.isEmpty()) {            TreeNode poll1 = (TreeNode) queueC.poll();            if (poll1.left!=null){                queueP.add(poll1);            }            if (poll1.right!=null){                queueP.add(poll1);            }        }    }

        上述思路时间复杂度过高无法通过测试用例,改为使用判断队列中元素个数来决定下层循环退出条件

public int maxDepth(TreeNode root) {        if (root==null){            return 0;        }        //创建一个队列        Queue deque = new LinkedList<>();        deque.add(root);        int crr = 0;        while (!deque.isEmpty()) {            //每一层的个数            int size = deque.size();            while (size-- > 0) {                TreeNode cur = (TreeNode)deque.poll();                if (cur.left != null)                    deque.add(cur.left);                if (cur.right != null)                    deque.add(cur.right);            }            crr++;        }        return crr;    }

7f131e580878d4daa1150abf9ef2a85a.png

原题链接

https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值