ChatGPT解决这个技术问题 Extra ChatGPT

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

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

提示:为避免术语之间的混淆: 1. 身高:想象测量一个人的身高,我们从脚趾到头部(从叶到根)进行测量。 2. 深度:想象一下测量海的深度,我们从地表到海床(从根到叶)进行测量。
@Yesh 这是一个很好的类比。
再加上@Yesh 很好的类比:对于树中间的某个内部节点,它的深度是它在根节点下方的级别,它的高度是它在其最底部的子节点上方的级别。
伙计们要小心-高度是从头到脚测量的,就像从节点到叶子定义的一样,并且会在树中向下遍历。想想一个失去一条腿的简笔画。那里的节点没有定义他的高度,因为它不是最长的路径。我们可以,比如说我们找到了那个节点的深度

D
Daniel A.A. Pelsmaeker

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

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

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

树的属性:

树的高度将是它的根节点的高度,或者等效地,它的最深节点的深度。

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

https://i.stack.imgur.com/8yPi9.png


+1 即将从此处添加具有相同内容的引用:en.wikipedia.org/wiki/Tree_%28data_structure%29
这是否意味着高度 == 最大深度
@rkm_Hodor:是的,树的高度总是等于最深节点的深度。
您能否引用您声称树的直径计算节点而不是边缘的来源?这与要求最长路径的图形直径的通常定义(参见例如en.wikipedia.org/wiki/Distance_(graph_theory))相冲突。
@j_random_hacker 这是定义问题,选择对您最有用的一个。要从顶点数到边数,只需减去 1。我更喜欢计算顶点数,因为这会导致图只有一个节点的宽度为 1,而空图的宽度为 0。{1 }
C
Community

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

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

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

深度是从根到给定节点的遍历计算出来的.....


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

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

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

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

我有时会看到要求计算节点(顶点)而不是边的问题,因此如果您不确定在考试或求职面试中是否应该计算节点或边,请要求澄清。


计算节点和边有什么不同。似乎两者都会给出相同的结果。如果我错了,请纠正我。
@jdhao根的深度怎么可能是2?它是 0(如果考虑边)或 1(如果考虑节点)。
@neowulf33,是的,我大错特错了。根节点的深度应该为0。为了不让人迷惑,我将删除我的评论。
a
anhtu.do1998

我知道这很奇怪,但 Leetcode 也根据路径中的节点数来定义深度。所以在这种情况下,深度应该从 1 开始(总是计算根)而不是 0。如果有人像我一样有同样的困惑。


是这样吗?请参阅leetcode.com/problems/diameter-of-binary-tree,它根据边缘定义它。
A
Akshay Sahu

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


W
Wilson Zhang

理解这些概念的另一种方法如下: 深度:在根位置画一条水平线,并将这条线视为地面。所以根的深度为0,它的所有子节点都向下增长,因此每一级节点的当前深度+1。

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


好记的方法。谢谢!
a
ashtree

我想发表这篇文章是因为我是一名 CS 本科生,而且我们越来越多地使用 OpenDSA 和其他开源教科书。从最高评价的答案看来,教授高度和深度的方式已经从一代到下一代发生了变化,我发布这个是为了让每个人都知道这种差异现在存在,希望不会导致任何错误程式!谢谢。

OpenDSA Data Structures & Algos book

如果 n1, n2,...,nk 是树中的节点序列,使得 ni 是 1<=i


对于它的价值,此链接的定义已更改为:“树中节点 M 的深度是从树的根到 M 的路径的长度。树的高度是树的深度树中最深的节点。”
@ashtree:你的意思是说这棵树的高度是 3,而不是 4?
@TaimurAhmedQureshi 看起来自从我发布以来,他们改变了定义,^kaya3 指出。所以最初高度应该是 4,但是有了 kaya3 的回答,现在,是的,它是 3。
K
Kushagra

Daniel AA Pelsmaeker 和 Yesh 类比的答案非常好。我想从hackerrank教程中添加更多内容。希望它也有帮助。

节点的深度(或级别)是它与树根节点的距离(即没有边)。

高度是根节点和最远叶子之间的边数。

高度(节点)= 1 + 最大值(高度(节点.leftSubtree),高度(节点.rightSubtree))。在阅读前面的示例之前,请记住以下几点。

任何节点的高度都是 1。

空子树的高度为-1。

单元素树或叶节点的高度为 0。


R
RBT

深度:

树中节点的深度是从根到节点的路径长度。树的深度是树中所有节点中的最大深度。

https://i.stack.imgur.com/aBbeM.jpg

高度:

节点的高度是从该节点到树中最深节点的路径长度。树的高度是从根节点到树中最深节点的路径长度。 (例如:上例中树的高度是四(计算边,而不是节点))。只有一个节点的树的高度为零。

有关树木基础知识的更多参考,请访问:INTRODUCTION AND PROPERTIES OF TREES


D
Diva

节点的“深度”(或等效的“级别数”)是从根节点开始的“路径”上的边数

节点的“高度”是从节点到叶节点的最长路径上的边数。


嗨,天后。由于该问题已经有一个可接受的答案,并且此特定答案不会添加任何其他详细信息。您可能会发现一些关于 SO 政策的相关讨论here
S
Sumedh Deshpande

深度:节点上方有多少条边,即节点的深度高度:节点下方有多少条边,即节点的高度

 Node1 // depth = 0 and height = 2 => root node
  |
 / \
Node2 Node3 //depth = 1 and height = 1
|     |
Node4 Node5  //depth = 2 and height = 0  => leaf node```

y
yuviscor

树的总深度等于树的高度,并且树的级别也相同,但是如果对于特定节点,高度不等于深度,因为深度的定义表明从根节点开始的最长路径到那个节点,在高度的情况下,它是从那个节点到叶节点。

整体树,D=H=L 但对于一个节点 D=L 但 D 可能不等于 H。


其他答案以更清晰的方式说同样的话。