Java求树的深度(真的是树,而不是二叉树)#全网首发#

相信对于二叉树的递归求深度这个问题,我们已经非常熟悉。
那么对于的递归求深度应该可以类似地使用二叉树的递归求深度的方法。

具体代码的实现

二叉树求深度(递归)
int Tree::treeDepth(TNode *bt) {if (bt == NULL)return 0;// 计算左子树的深度int a = treeDepth(bt.leftchild);// 计算右子树的深度int b = treeDepth(bt.rightchild);// 二叉树bt的深度=路径最长的子树深度 + 1return (a >= b)?(a + 1) : (b + 1);}
树求深度(递归)
int Tree::treeDepth(TNode *bt)
{if(bt == NULL)return 0;else{int a = treeDepth(bt->firstchild);int b = treeDepth(bt->rightsib);if(bt->rightsib != NULL)return (a >= b)?(a+1):b;elsereturn (a >= b)?(a+1):(b+1);}
}

1.解决树递归求深度的问题关键在于:树与二叉树的转换。
2.用对二叉树的递归求深度的理念来解决的递归求深度的问题。
3.可以看到上述两个代码的区别在于最后的return代码,这就是我们要对转换成二叉树之后进行的特殊处理。

树的递归求深度讲解

一、树转换成二叉树:

1.加线——中所有的相邻兄弟结点之间加一条线;
2.去线——对中的每个结点,只保留它与第一个孩子结点之间的连线,删去它与其他孩子结点之间的连线;
3.层次调整——按照二叉树结点之间的关系进行层次调整。

二、树的递归求深度特别之处

1.首先,我们举个栗子:
这是一棵

而这是那一棵转换成的二叉树

通过上述的二叉树求深度(递归)方法得到以下内容:
(中的firstchild相当于二叉树中的leftchild,中的rightsib相当于二叉树中的rightchild)

可以看到通过这种方法求得的深度是5,这明显是不正确的。
因为上述方法将兄弟结点的度默认加入了从AI的路径长度之中,而我们求的深度必须计算出其准确的路径长度。同样的,AF的路径长度与AH的路径长度都是不正确的。

最大特点:

相较于二叉树的递归求深度,转换成二叉树的递归求深度代码中无意中增加了多余的一步,那就是经历过了兄弟结点。这一步需要进行不认可处理,这样最后得到的深度才是准确的。

三、树的递归求度数代码更改

具体代码的重现

二叉树求深度(递归)
int Tree::treeDepth(TNode *bt) {if (bt == NULL)return 0;// 计算左子树的深度int a = treeDepth(bt.leftchild);// 计算右子树的深度int b = treeDepth(bt.rightchild);// 二叉树bt的深度=路径最长的子树深度 + 1return (a >= b)?(a + 1) : (b + 1);}
树求深度(递归)
int Tree::treeDepth(TNode *bt)
{if(bt == NULL)return 0;else{int a = treeDepth(bt->firstchild);int b = treeDepth(bt->rightsib);if(bt->rightsib != NULL)return (a >= b)?(a+1):b;elsereturn (a >= b)?(a+1):(b+1);}
}

上述求深度代码中:if(bt->rightsib != NULL)。这一步将会识别出经历过兄弟结点的度,并且不再认可经历过兄弟结点的度了。代码同样不再return b+1,取而代之的是return b。
具体图解如下:

最后求出树的深度终于是4啦!答案正确!

最后总结一下:利用树的递归方法求深度,需要理解树转换成二叉树后结构发生的独特变化。

发掘出其中的秘密——虽然二者遍历时经过的路径相同,但需要被认可的度却不相同。因为在树中,经过的兄弟结点之间的路径,并不能像二叉树中经过的右孩子结点之间的路径一样,被算入右子树的度中!!

做文章不易,希望能得到大佬们的一键三连QAQ。这就是对我继续创作最大的鼓励!!最后纳兹咩献上~~

引用需经过本博客作者同意,且为非营利性!未经允许,严禁转载!

Java求树的深度(真的是树,而不是二叉树)#全网首发#相关推荐

  1. [转]B树(多向平衡查找树)详解

    B-树是对2-3树数据结构的扩展.它支持对保存在磁盘或者网络上的符号表进行外部查找,这些文件可能比我们以前考虑的输入要大的多(以前的输入能够保存在内存中). (B树和B+树是实现数据库的数据结构,一般 ...

  2. PAT甲级1021 Deepest Root :[C++题解]树的最大深度、并查集、dfs求树的深度

    文章目录 题目分析 题目链接 题目分析 分析: 考察知识点:并查集.dfs.树的深度 给定n个结点,n-1条边,只要能保证只有1个连通分量,就是一棵树.否则的话就不是树,它是不连通的. 用并查集来看是 ...

  3. 【数据结构】(森林)以孩子兄弟链表为存储结构,请设计递归算法求树的深度

    以孩子兄弟链表为存储结构,请设计递归算法求树的深度 算法思想:求树的深度采用递归的思想就是求每一个兄弟的深度最大值 int Height(CSTree bt){int hc,hs;if(bt==NUL ...

  4. python创建树结构、求深度_数据结构-树以及深度、广度优先遍历(递归和非递归,python实现)...

    前面我们介绍了队列.堆栈.链表,你亲自动手实践了吗?今天我们来到了树的部分,树在数据结构中是非常重要的一部分,树的应用有很多很多,树的种类也有很多很多,今天我们就先来创建一个普通的树.其他各种各样的树 ...

  5. 程序员面试题精选100题(27)-二元树的深度[数据结构]

    题目:输入一棵二元树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 例如:输入二元树: 10                     ...

  6. c语言利用遍历求树高的程序,用C语言实现二叉树的遍历极其应用

    用C语言实现二叉树的遍历极其应用 [1][摘要]:<数据结构>是计算机系学生的一门专业技术基础课程,计算机科学各领域及有关的应用软件都要用到各种数据结构.C语言有较丰富的数据类型.运算符以 ...

  7. 基于深度搜索的树路径求解_基于深度学习的自动验证码求解器

    基于深度搜索的树路径求解 计算机视觉,网络安全,深度学习(Computer Vision, Cybersecurity, Deep Learning) Disclaimer: The followin ...

  8. 树的深度 递归非递归实现

    树的深度 递归非递归实现 package com.dugstudio.SwordToOffer;import java.util.LinkedList;/*** 树的深度递归和非递归算法*/ clas ...

  9. 2022-5-18[树] 后继者, 检查子树, 删点成林, 树的深度

    1. 后继者 设计一个算法,找出二叉搜索树中指定节点的"下一个"节点(也即中序后继). 如果指定节点没有对应的"下一个"节点,则返回nullptr. 示例 示例 ...

  10. java树父节点_Java基础 - 树的实现(一)父节点表示法

    父节点表示法: 通过前面的介绍可以发现,树中除根节点之外的每个节点都有一个父节点.为了记录树中节点与节点之间的父子关系,可以为每个节点增加一个parent域,用来记录该节点的父节点.对于如下图所示的数 ...

最新文章

  1. 2021中国大学排名发布:北京大学连续14年位居榜首
  2. 蚂蚁移动开发平台 mPaaS 3.0 智能化 + 生态化
  3. 特征选择--文本分类: 信息增益
  4. Appium移动自动化测试(三)--安装Android模拟器(转)
  5. 自然语言理解难在哪儿?
  6. Oracle连接查询
  7. python 垃圾回收
  8. 数据结构与算法 汉诺塔问题和列车车厢重排问题
  9. xmlhttp的状态码收集
  10. ThinkPHP5+Redis单例型购物车
  11. php百度地图api的geocoder,百度地图API提供Geocoder类
  12. 数据仓库需求分析指南
  13. 基于百度万年历定制化 1
  14. Mysql5.7下载安装步骤详解
  15. Xshell复制粘贴快捷键设置
  16. pytorch RuntimeError: size mismatch, m1: [16 x 86016], m2: [25088 x 512] at /opt/conda/conda-bld/pyt
  17. win10 1073linux密码,Linux Bash on Win10 忘记密码解决
  18. 图像测量技术:面积测量
  19. 【理论知识学习32】归纳偏差与选择性偏差(概念作用以及举例说明)
  20. linux登陆操作mysql

热门文章

  1. word 2016编辑区鼠标光标消失/变白解决方案
  2. win10没有声音(扬声器一直显示未插入)
  3. 计蒜客--T1212 仙岛求药
  4. 蒙牛、小米、比亚迪,明星企业为何扎堆换LOGO?
  5. 项目管理中的冰山理论
  6. 华为账号登录总显示服务器繁忙,愚人节玩笑:华为手机帐号无法登陆,提示网络繁忙...
  7. DxO发布Nik Collection 5插件,胶片颗粒更逼真
  8. 如何根据经纬度查询地理位置
  9. 中文邮件分类[朴素贝叶斯、支持向量机、Logistic,TF-IDF,词袋模型]
  10. 基于区块链技术的航运贸易流程研究