首页 > 其他分享 >二叉树某个节点的深度

二叉树某个节点的深度

时间:2023-07-28 21:23:15浏览次数:45  
标签:node 结点 TreeNode public depth 二叉树 深度 某个 节点

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

深度的定义

[ 当前结点的层数。默认叶子节点是 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 结点深度是:

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

标签:node,结点,TreeNode,public,depth,二叉树,深度,某个,节点
From: https://www.cnblogs.com/focus-yun/p/17588911.html

相关文章

  • 数据结构之带头节点的单链表增删改查操作实现
     单链表的定义什么是单链表   单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。   单链表的各个数据元素在物理上可以是离散存放的,每个结点除了存放数据元素外,还要存储指向下一个节点的指针。而顺序表是连续存放的,每个结点中只......
  • 03-二叉树的遍历
    二叉树的遍历定义:遍历是数据结构中的常见操作把所有元素都访问一遍线性数据结构的遍历比较简单分为:正序遍历和逆序遍历根据结点访问顺序的不同,二叉树的常见遍历方式有4种前序遍历(PreorderTraversal)中序遍历(inorderTraversal)后序遍历(PostorderTraversal)层序遍......
  • docker swarm 工作节点获取不到overlay
    DockerSwarm工作节点获取不到overlay网络在使用DockerSwarm构建分布式应用程序时,我们可能会遇到一些网络相关的问题。其中之一就是工作节点无法获取到overlay网络。本文将介绍DockerSwarmoverlay网络,并解决工作节点无法获取到overlay网络的问题。什么是DockerSw......
  • java 实体类某个字段失效
    Java实体类某个字段失效在Java编程中,实体类是指用来表示具体事物的类,它包含了各种属性和方法来描述该事物的特征和行为。然而在实际开发中,有时候会遇到实体类中某个字段失效的问题,即该字段的值无法正确地被赋值或获取。本文将介绍一些常见的造成字段失效的原因,并提供相应的解决方......
  • 多节点高性能计算GPU集群的构建
    建议参考原文:https://www.volcengine.com/docs/6535/78310 ============================================= 一直都在使用超算的GPU集群,但是从来没有实际操作过,虽然在自己的个人的三台主机上安装过小型的MPI集群,但是毕竟没有实际超算平台的构建经验,比如NCCL的超算平台上的......
  • java截取某个字符后面的字符串
    Java截取某个字符后面的字符串概述在Java中,如果我们需要截取某个字符后面的字符串,可以使用substring()方法。该方法允许我们从一个字符串中提取指定范围的子字符串。本文将介绍如何使用substring()方法来实现这一功能。步骤下面是实现截取某个字符后面的字符串的步骤:步骤......
  • 使用Python统计下桌面某个文件夹下(含多层子文件夹)具体文件的数量(方法二)
    大家好,我是皮皮。一、前言前几天在Python最强王者群【东哥】问了一个Python自动化办公的问题,一起来看看吧。这个是他自己在实际工作中遇到的需求,正好遇到了这个问题,想着用Python来实现下。二、实现过程上一篇文章中已经分享了一个方法,这一篇文章继续分享另外一个方法,由【小王......
  • jquery 操作某个td
    如何使用jQuery操作某个td概述在本文中,我将教你如何使用jQuery来操作一个HTML表格中的某个td元素。首先,让我们了解一下整个过程。过程概览下面是一张表格,它包含了三行三列的td元素:列1列2列3行1td1td2td3行2td4td5td6行3td7td8td9我......
  • 使用Python统计下桌面某个文件夹下(含多层子文件夹)具体文件的数量(方法一)
    大家好,我是皮皮。一、前言前几天在Python最强王者群【东哥】问了一个Python自动化办公的问题,一起来看看吧。这个是他自己在实际工作中遇到的需求,正好遇到了这个问题,想着用Python来实现下。二、实现过程这里【郑煜哲·Xiaopang】给了一个提示,使用pathlib.glob()来进行解决,后来......
  • docker 获取某个时间段的日志
    dockerlogs--since='2023-07-26T01:50:00'--until='2023-07-26T03:00:00'abbccdd  >aaaa0726.log2>&1TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanianChin......