首页 > 编程语言 >数据结构与算法-求数的最小深度是多少?

数据结构与算法-求数的最小深度是多少?

时间:2024-09-14 14:58:54浏览次数:13  
标签:right TreeNode cur int null 算法 求数 数据结构 left


给定一颗二叉树的头节点head
求以head为头的树中,最小深度是多少?

public class MinHeight {

    public static class TreeNode {
        public int val;
        public TreeNode left;
        public TreeNode right;

        public TreeNode(int x) {
            val = x;
        }
    }

    public static void main(String[] args) {
        TreeNode h1 = new TreeNode(1);
        TreeNode h2 = new TreeNode(2);
        TreeNode h3 = new TreeNode(3);
        TreeNode h4 = new TreeNode(4);
        TreeNode h5 = new TreeNode(5);
        TreeNode h6 = new TreeNode(6);

        h1.left = h2;
        h2.left = h3;
        h3.left = h4;
        h4.left = h6;
        h1.right = h5;

        System.out.println(minDepth1(h1));
        System.out.println(minDepth2(h1));
    }

    // 下面的方法是一般解,使用递归
    public static int minDepth1(TreeNode head){
        if(head == null){
            return 0;
        }
        return p(head);
    }

    // 返回x为头的树,最小深度是多少
    public static int p(TreeNode x){
        if(x.left == null && x.right == null){
            return 1;
        }

        // 左右子树起码有一个不为空
        int leftH = Integer.MAX_VALUE;
        if(x.left != null){
            leftH = p(x.left);
        }

        int rightH = Integer.MAX_VALUE;
        if(x.right != null){
            rightH = p(x.right);
        }

        return 1 + Math.min(leftH,rightH);
    }

    // 下面的方法是morris遍历的解, 比递归节省空间
    public static int minDepth2(TreeNode head) {
        if (head == null){
            return 0;
        }
        TreeNode cur = head;
        TreeNode mostRight = null;
        int curLevel = 0;
        int minHeight = Integer.MAX_VALUE;
        while(cur != null){
            mostRight = cur.left;
            if(mostRight != null){
                int rightBoardSize = 1;
                while(mostRight.right != null && mostRight.right != cur){
                    rightBoardSize++;
                    mostRight = mostRight.right;
                }
                if(mostRight.right == null){// 第一次到达
                    curLevel++;
                    mostRight.right = cur;
                    cur = cur.left;
                    continue;
                }else{ // 第二次到达
                    if(mostRight.left == null){
                        // 上个节点是叶子节点
                        minHeight = Math.min(minHeight,curLevel);
                    }
                    curLevel = curLevel - rightBoardSize;
                    mostRight.right = null;
                }
            }else{
                curLevel++;
            }
            cur = cur.right;
        }

        int findRight = 1;
        cur = head;
        while(cur.right != null){
            findRight++;
            cur = cur.right;
        }
        if(cur.left == null && cur.right == null){
            minHeight = Math.min(minHeight,findRight);
        }
        return minHeight;
    }
}


标签:right,TreeNode,cur,int,null,算法,求数,数据结构,left
From: https://blog.51cto.com/u_6760421/12016803

相关文章

  • *Python*机器学习算法——线性回归(Linear Regression)
    目录⭐️引言⭐️理论1、 简单线性回归2、 多元线性回归3、最佳拟合⭐️结语⭐️引言        线性回归(LinearRegression)是一种基本的预测分析方法,它通过拟合数据点来建立因变量(目标变量)与一个或多个自变量之间的关系模型。线性回归假设这种关系是线性的,并试图找到......
  • yolov8 obb算法中的GBB和ProbIoU核心内容
    2021年10月提交的原论文《GaussianBoundingBoxesandProbabilisticIntersection-over-UnionforObjectDetection》一.研究背景研究问题:这篇文章要解决的问题是如何更好地表示对象的形状和位置,以便在目标检测任务中提高检测精度。传统的水平边界框(HBB)和定向边界框(OBB)......
  • 一张图精通多种排序算法的选择策略
    排序算法是计算机科学中的基石,广泛应用于数据处理、搜索优化和日常业务逻辑中。冒泡排序以其简单性适用于教学和小数据集;选择排序则因其稳定性而受到青睐;插入排序效率高于几乎有序的数据。希尔排序通过优化插入排序提升性能,适用于中等规模数据集。归并排序以其稳定的时间复杂度和......
  • 大一新生以此篇开启你的算法之路
    各位大一计算机萌新们,你们好,本篇博客会带领大家进行算法入门,给各位大一萌新答疑解惑。博客文章略长,可根据自己的需要观看,在博客中会有给大一萌新问题的解答,请不要错过。入门简介:算法,从字面意思来说就是计算方法,它是解决的问题的方法。一个问题有很多种方法解决问题,那么这很多......
  • 基于极大似然算法的系统参数辨识matlab仿真
    1.程序功能描述基于极大似然算法的系统参数辨识。对系统的参数a1,b1,a2,b2分别进行估计,计算估计误差以及估计收敛曲线,然后对比不同信噪比下的估计误差。2.测试软件版本以及运行结果展示MATLAB2022a版本运行3.核心程序fork=5:LEN%构造观测向量h=[-yout(k-1)......
  • 基于极大似然算法的系统参数辨识matlab仿真
    1.程序功能描述基于极大似然算法的系统参数辨识。对系统的参数a1,b1,a2,b2分别进行估计,计算估计误差以及估计收敛曲线,然后对比不同信噪比下的估计误差。2.测试软件版本以及运行结果展示MATLAB2022a版本运行  3.核心程序%迭代计算参数值和误差值fork=5:LEN%......
  • 代码随想录算法训练营,9月14日 | 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,23
    530.二叉搜索树的最小绝对差题目链接:530.二叉搜索树的最小绝对差文档讲解︰代码随想录(programmercarl.com)视频讲解︰二叉搜索树的最小绝对差日期:2024-09-14想法:好好利用二叉搜索树中序遍历是有序的性质,设置一个节点表示前一个结点就能很方便的计算差值了Java代码如下:classSo......
  • 地平线轨迹预测 QCNet 参考算法-V1.0
    该示例为参考算法,仅作为在征程6上模型部署的设计参考,非量产算法。01简介轨迹预测任务的目的是在给定历史轨迹的情况下预测未来轨迹。这项任务在自动驾驶、智能监控、运动分析等领域有着广泛应用。传统方法通常直接利用历史轨迹来预测未来,而忽略了预测目标的上下文或查询信......
  • 限流-令牌桶算法
    importjava.util.concurrent.TimeUnit;importjava.util.concurrent.atomic.AtomicInteger;/***限流器*/publicclassRateLimiter{/***时间窗口,单位毫秒*/privatefinallongtimeWindow;/***窗口时间内最大请求数*/pr......
  • AI算法部署方式对比分析:哪种方案性价比最高?
    随着人工智能技术的飞速发展,AI算法在各个领域的应用日益广泛。AI算法的部署方式直接关系到系统的性能、实时性、成本及安全性等多个方面。本文将探讨AI算法分析的三种主要部署方式:本地计算、边缘计算和云计算,并详细分析它们的优劣性。一、本地计算1)部署方式本地计算是指将AI算......