【数据结构】求二叉树的最大深度

                                     求二叉树的最大深度

二叉树的最大深度即二叉树的高度,一般有两个解法,第一种是递归,代码简单,但不太好理解。第二种是使用层序遍历的方式,记录每层的节点数,遍历完一层,层数计数器加一。

 

一、递归

想要求一颗二叉树的高度,即求孩子节点的最大深度,要么是左孩子,要么是右孩子,那么我们只需要对传入的孩子节点递归调用即可。

 /**
     * 求二叉树的深度(使用递归)
     *
     * @param root
     * @return
     */
    public int getHeight(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int leftHeight = getHeight(root.getLeft());
        int rightHeight = getHeight(root.getRight());
        return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
    }

 

 

二、使用层序遍历

通过记录本层元素总数、本层已经访问过的元素,层数计数器来获得二叉树的高度,此中方法也可以获得二叉树的最大宽度。使用这种方式,灵活度比较高。

 /**
     * 求二叉树的深度(不使用递归)
     *
     * @param root
     * @return
     */
    public int getHeight2(TreeNode root) {
        if (root == null) {
            return 0;
        }
        LinkedList<TreeNode> list = new LinkedList<>();
        list.offer(root);
        //最大宽度留备用
        int max=0;
        //二叉树的深度
        int level = 0;
        //本层中元素总数
        int size = 0;
        //本层已经访问过的元素个数
        int cur = 0;
        while (!list.isEmpty()) {
            size = list.size();
            max=Math.max(max,size);
            cur = 0;
            while (cur < size) {
                TreeNode node = list.poll();
                cur++;
                if (node.getLeft() != null) {
                    list.offer(node.getLeft());
                }
                if (node.getRight() != null) {
                    list.offer(node.getRight());
                }
            }
            level++;
        }
        System.out.println("二叉树最大宽度为:"+max);
        return level;
    }

 

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SunAlwaysOnline

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值