树的深度和高度之间有什么区别?


262

这是算法理论中的一个简单问题。
它们之间的区别在于,在一种情况下,您要计算根节点和具体节点之间的最短路径上的节点数,而在其他数量的边上。
哪一个


78
提示:为避免术语之间的混淆:1.身高:想象一下测量一个人的身高,我们从脚趾到头部(从叶到根)进行测量。2.深度:想象一下测量海洋的深度,我们从地表到海床(从根到叶)进行测量。
Yesh

@Yesh这是一个很好的类比。
特殊角色

1
再加上@Yesh的出色类比:对于树中间的某个内部节点,深度是其在根节点下方的层数,高度是其在其最底层子节点上方的层数的高度。
Thomas Nguyen

Answers:


662

我了解到深度和高度是节点的属性:

  • 节点的深度是从节点到树的根节点的边数。
    根节点的深度为0。

  • 节点的高度是从节点到叶子的最长路径上的边数。
    叶节点的高度为0。

树的属性:

  • 高度树将是其根节点的高度,
    或等价地,其最深节点的深度。

  • 直径(或宽度树)是数量节点的任意两个叶节点之间的最长路径上。下面的树的直径为6个节点。

一棵树,每个节点的高度和深度


20
+1正要与相同内容从这里添加报价:en.wikipedia.org/wiki/Tree_%28data_structure%29
彼得Török

2
就是说高度==最大深度
roottraveller

6
@rkm_Hodor:是的,树的高度始终等于最深节点的深度
Daniel AA Pelsmaeker

1
能否请您援引消息来源说树的直径是节点而不是边缘?这与通常要求最长路径的图的直径定义(例如,参见en.wikipedia.org/wiki/Distance_(graph_theory))相冲突。
j_random_hacker

1
@j_random_hacker这是一个定义问题,请选择对您最有用的一个。要从顶点数到边数,只需减去1。我更喜欢计算顶点数,因为这将导致一个图只有一个节点的宽度为1,而一个空图的宽度为0。mathworld。 wolfram.com/GraphDiameter.html
Daniel AA Pelsmaeker

44

一棵树的高度和深度相等...

但是节点的高度和深度不相等,因为...

高度是通过从给定节点遍历到最深的叶子来计算的。

从根到给定节点的遍历计算深度。


4
“高度是通过从叶子到给定节点的遍历来计算的”,这是不正确的,叶子必须是给定节点所有叶子中最深的叶子。
mayyWOZ '16

14

根据Cormen等。算法简介(附录B.5.3)中,树T中节点X的深度定义为从T的根节点到X的简单路径的长度(边数)。节点Y的高度为最长的边数从Y到叶子向下简单路径。一棵树的高度定义为其根节点的高度。

请注意,简单路径是没有重复顶点的路径。

一个高度等于的最大深度。节点的深度和节点的高度不一定相等。参见第三版Cormen等的图B.6。这些概念的说明。

有时我会遇到一些问题,要求人们计算节点(顶点)而不是边缘,因此请澄清一下,如果您不确定在考试或工作面试中是否应该计算节点或边缘。


节点和边的计数是否有差异。似乎两者都会给出相同的结果。如果我错了,请纠正我。
VINOTH ENERGETIC 2016年

@jdhao的根深度如何为2?它可以是0(如果考虑边缘)或1(如果考虑节点)。
neowulf33

@ neowulf33,是的,我错了。根节点的深度应为0。为了避免混淆,我将删除我的评论。
jdhao

2

简单答案:
深度:
1. :从的根节点到叶节点的边/弧的数量称为树的深度。
2. 节点:从根节点到该节点的边/弧的数量称为该节点的深度。


2

理解这些概念的另一种方法如下:深度:在根位置绘制一条水平线,并将其视为地面。因此,根的深度为0,并且其所有子级都向下生长,因此节点的每个级别的当前深度均为1。

高度:相同的水平线,但是这次地面位置是外部节点,这是树的叶子,向上计数。


2

我想发表这篇文章是因为我是一名本科生CS学生,越来越多的我们使用OpenDSA和其他开放源代码教科书。从评分最高的答案看来,教授高度和深度的方式已经从一代代转换到了另一代,我正在发布此内容,以便每个人都知道这种差异现在存在,并希望不会在任何情况下引起错误程式!谢谢。

从《OpenDSA数据结构和算法》书中

如果n 1,n 2,...,n k是树中节点的序列,使得n i是n i +1 的父级,且1 <= i <k,则此序列称为从n开始的路径1至n k。路径的长度是k-1。如果存在从节点R到节点M的路径,则R是M的祖先,而M是R的后代。因此,树中的所有节点都是树的根的后代,而根是祖先所有节点。树中节点M的深度是从树的根部到M的路径的长度。树的高度比树中最深节点的深度大一。深度为d的所有节点在树中的级别为d。根是级别0上的唯一节点,其深度为0。

图7.2.1

图7.2.1:二叉树。节点A是根。节点B和C是A的孩子。节点B和D一起形成一个子树。节点B有两个子节点:节点的左子节点是空树,节点的右子节点是D。节点A,C和E是G的祖先。节点D,E和F构成树的第二层。节点A处于级别0。从A到C到E到G的边形成一条长度为3的路径。节点D,G,H和I为叶子。节点A,B,C,E和F是内部节点。I的深度为3。这棵树的高度为4。


对于它的价值,此链接的定义已更改为:“树中节点M的深度是从树的根到M的路径的长度。树的高度是树的深度。树中最深的节点。”
kaya3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.