二叉树某个节点的深度

news2024/11/17 15:52:57

微信公众号:码云成化
关注可了解更多的教程及进阶技巧。问题或建议,请公众号留言;
如果你觉得阿云对你有所帮助,欢迎赞赏

深度的定义

[ 当前结点的层数。默认叶子节点是 null 节点,深度是 0 。其子节点是 null 节点,深度是 1 。 ]

 

  1. 给出上图一个普通二叉树,如果计算结点深度,用我们大脑去做的话会怎么做呢?我觉得一般人思路应该是这样的,先把最直观的信息采集起来。
  2. 那么 [4] 结点的深度、[5] 结点的深度、[3] 结点的深度,因为它们都没有子节点,深度都是 1 。
  3. 根据 [4] 结点的深度和 [5] 结点的深度,可以求出 [2] 结点的深度,max( [4] 结点的深度, [5] 结点的深度 ) + 1 = 2。
  4. 有了 [2] 结点的深度和 [3] 结点的深度,可以求出 [1] 结点的深度,max( [2] 结点的深度, [3] 结点的深度 ) + 1 = 3。

深度优先搜索

大多数使用的是递归函数。其实并没有名字所说的那么复杂,使用递归函数对整个目标进行遍历。

递归函数的三要素

  • 子问题与原问题做同样的事。
  • 需要有一个要递归函数结束的出口。
  • 递归表达式。

递归过程

  1. 求 depth( [1] 结点 ) 必求 depth( [2] 结点 ) 和 depth( [3] 结点 )
  2. 求 depth( [2] 结点 ) 必求 depth( [4] 结点 ) 和 depth( [5] 结点 )

递归表达式

depth(rt)=max(depth(rt->left), depth(rt->right))+1;

编程实现

package com.pure.common.recursion;
/**
 * @desc: 二叉树深度遍历
 **/
public class DepthUtil {
    // 结点类
    public static class TreeNode {
      private int node;
      private TreeNode left;
      private TreeNode right;
      public TreeNode() {
      }
      public TreeNode(int node) {
        this.node = node;
      }
      public int getNode() {
        return node;
      }
      public void setNode(int node) {
        this.node = node;
      }
      public TreeNode getLeft() {
        return left;
      }
      public void setLeft(TreeNode left) {
        this.left = left;
      }
      public TreeNode getRight() {
        return right;
      }
      public void setRight(TreeNode right) {
        this.right = right;
      }
      @Override
      public String toString() {
        return "TreeNode{" +
          "node=" + node +
          ", left=" + left +
          ", right=" + right +
          '}';
      }
    }
    public static void main(String[] args) {
      TreeNode root$1 = new TreeNode(1);
      TreeNode node$2 = new TreeNode(2);
      TreeNode node$3 = new TreeNode(3);
      TreeNode node$4 = new TreeNode(4);
      TreeNode node$5 = new TreeNode(5);
      // 1 结点
      root$1.setLeft(node$2);
      root$1.setRight(node$3);
      // 2 结点
      node$2.setLeft(node$4);
      node$2.setRight(node$5);
      System.out.println("root 结点深度是:" + depth(root$1));
      System.out.println("node$2 结点深度是:" + depth(node$2));
      System.out.println("node$3 结点深度是:" + depth(node$3));
      System.out.println("node$4 结点深度是:" + depth(node$4));
      System.out.println("node$5 结点深度是:" + depth(node$5));
    }
    // 深度递归函数
    public static int depth(TreeNode root) {
      if (null == root) {
        return 0;
      }
      int l, r;
      l = depth(root.getLeft());
      r = depth(root.getRight());
      return Math.max(l, r) + 1;
    }
}

输出结果

root 结点深度是:3
node$2 结点深度是:2
node$3 结点深度是:1
node$4 结点深度是:1
node$5 结点深度是:

希望可以帮到你!相互取暖,共同进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/804207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA基础-多线程入门(详解)

目录 引言 一,线程概念 二,创建线程 2.1,继承Thread类,重写run方法 2.2,实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函 数的target 2.3,通…

【Vuvuzela 声音去噪算法】基于流行的频谱减法技术的声音去噪算法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

C# SourceGenerator 源生成器初探

简介 注意: 坑极多。而且截至2023年,这个东西仅仅是半成品 利用SourceGenerator可以在编译结束前生成一些代码参与编译,比如编译时反射之类的,还有模板代码生成都很好用。 演示仓库传送门-Github-yueh0607 使用 1. 创建项目 …

EPICS asyn测试程序--如何连接asynManager

这是一个如何连接asynManager的示例。这个示例放在<top>/testApp中并且包含以下组件&#xff1a; rootorangepi5:/usr/local/EPICS/program/asynTest/testApp# ls -R .: Db Makefile src./Db: Makefile test.db./src: echoDriver.c echoDriver.dbd Makefile testM…

3.Java面试题—JVM基础、内存管理、垃圾回收、JVM 调优

本文目录如下&#xff1a; 七、JVM一、JVM 基础什么是Java虚拟机?Java对象 创建过程?对象有哪几种引用&#xff1f; 二、内存管理说⼀下 JVM 的内存区域 (堆 和 栈)&#xff1f;内存溢出 和 内存泄漏 是什么意思&#xff1f;内存泄漏可能由哪些原因导致呢&#xff1f;Java 堆…

OceanMind海睿思助力南京钢铁苏粮集团入选中国信通院审计“领航”案例

近日&#xff0c;由中国内部审计协会指导&#xff0c;中国信息通信研究院主办的2023年内部审计数字化转型“领航”案例征集结果公布。 其中&#xff0c;中新赛克海睿思参与建设的《南京钢铁-基于数字化审计为核心的全域风控管理》入选标杆案例&#xff0c;《苏粮集团-风控内控合…

Vue中使用echarts

1 安装 npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm install echarts -S 2 main.js引入 3 引入成功

C++ 成员初始化列表

如果数据成员是常量或者引用的情况&#xff1a; 1.常量和引用不可以在构造函数中进行赋值&#xff1a; #include<iostream> using namespace std; class A { public:A(int i 0){m_i 10;m_j 30; //error 这一句代码叫做赋初值m_k m_i; //error} private:int m_i;/…

openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符

文章目录 openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符23.1 时间日期操作符23.2 时间/日期函数23.3 TIMESTAMPDIFF23.4 EXTRACT23.5 date_part openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符 23.1 时间日期操作符 用户在使用时…

Appium+python自动化(三十三)- 本地调试测试代码,远程控制测试环境-Remote(超详解)

简介 在前边所有涉及启动app的时候有这样一行代码driver webdriver.Remote(http://127.0.0.1:4723/wd/hub, desired_caps)&#xff0c;很多小伙伴们和同学们不知道这个ip和端口哪里来的&#xff0c;我觉得有必要给小伙伴解释一下&#xff0c;于是决定写一篇关于这个appium的服…

直播美颜技术的未来:美型SDK的前沿探索

一、时代背景 随着社交媒体和视频直播的兴起&#xff0c;直播美颜技术的需求日益增长。从简单的滤镜效果到人脸美颜算法的应用&#xff0c;这一领域一直在迅速发展。然而&#xff0c;美型SDK的问世标志着直播美颜技术的新篇章&#xff0c;它以更加精细化的处理和更强大的功能&…

使用win10专业版自带远程桌面公司内网电脑

在现代社会中&#xff0c;各类电子硬件已经遍布我们身边&#xff0c;除了应用在个人娱乐场景的消费类电子产品外&#xff0c;各项工作也离不开电脑的帮助&#xff0c;特别是涉及到数据采集和储存的场景&#xff08;如安保监控、自动化流程等等&#xff09;&#xff0c;更是离不…

大数据课程D4——hadoop的MapReduce

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解MapReduce的作用和特点&#xff1b; ⚪ 掌握MapReduce的组件&#xff1b; ⚪ 掌握MapReduce的Shuffle&#xff1b; ⚪ 掌握MapReduce的小文件问题&#xff1b; ⚪…

Vue项目引入图片的两种场景和三种方式

场景一&#xff1a;public目录下的图片 public目录 public目录下的图片引入方式&#xff1a; Bash <!--/images/图片名称&#xff0c;这种属于绝对路径&#xff0c;/指向public目录 --> <img src"/images/image.png"> 场景二&#xff1a;在src目录…

【Spring】更简单的读取和存储对象,五大类注解

经过前面的学习&#xff0c;我们已经可以实现基本的 Spring 读取和存储对象的操作了&#xff0c;但在操作的过程中我们发现读取和存储对象并没有想象中的那么 “简单”&#xff0c;所以接下来我们要学习更加简单的操作 Bean 对象的方法 在 Spring 中想要更简单的存储和读取对象…

25.8 matlab里面的10中优化方法介绍—— 拉各朗日乘子法求最优化解(matlab程序)

1.简述 拉格朗日乘子法&#xff1a; 拉格朗日乘子法&#xff08;Lagrange multipliers&#xff09;是一种寻找多元函数在一组约束下的极值的方法。通过引入拉格朗日乘子&#xff0c;可将有 变量与 约束条件的最优化问题转化为具有变量的无约束优化问题求解 举个例子&#xff…

YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)

YOLOv5&#xff1a;使用7.0版本训练自己的实例分割模型&#xff08;车辆、行人、路标、车道线等实例分割&#xff09; 前言前提条件相关介绍使用YOLOv5-7.0版本训练自己的实例分割模型YOLOv5项目官方源地址下载yolov5-7.0版源码解压目录结构 准备实例分割数据集在./data目录下&…

使用python库uvicorn替代Nginx发布Vue3项目

目录 一、Vue3项目打包 二、将打包文件放到python项目 三、配置uvicorn服务 四、启动服务 【SpringBoot版传送门&#xff1a;使用SpringBoot替代Nginx发布Vue3项目_苍穹之跃的博客-CSDN博客】 一、Vue3项目打包 &#xff08;博主vue版本&#xff1a;3.2.44&#xff09; 由…

论文精读之BERT

目录 1.摘要&#xff08;Abstract&#xff09; 2.引言&#xff08;Introduction&#xff09;&#xff1a; 3.结论&#xff08;Conlusion&#xff09;&#xff1a; 4.BERT模型算法: 5.总结 1.摘要&#xff08;Abstract&#xff09; 与别的文章的区别是什么:BERT是用来设计去…

Acwing.285 没有上司的舞会(动态规划)

题目 Ural大学有N名职员&#xff0c;编号为1~N。 他们的关系就像—棵以校长为根的树&#xff0c;父节点就是子节点的直接上司。每个职员有一个快乐指数&#xff0c;用整数H给出&#xff0c;其中1≤i≤N。 现在要召开一场周年庆宴会&#xff0c;不过&#xff0c;没有职员愿意和…