这是算法理论中的一个简单问题
它们之间的区别在于,在一种情况下,您可以计算根节点和具体节点之间最短路径上的节点数和其他边数。
哪个是哪个?
答案 0 :(得分:491)
我了解到深度和高度是节点的属性:
节点的深度是从节点到树根节点的边数。
根节点的深度为0。
节点的高度是从节点到叶子的最长路径上的边数。
叶子节点将具有高度为0。
树的属性:
树的高度将是其根节点的高度,或者相当于其最深节点的深度。
树的直径(或宽度)是任意两个叶节点之间最长路径上的节点的数量。下面的树直径为6个节点。
答案 1 :(得分:32)
树的高度和深度相等......
但节点的高度和深度不相等,因为......
通过从给定节点遍历到最深的叶子来计算高度。
深度是从从根到给定节点的遍历计算的.....
答案 2 :(得分:13)
根据Cormen等人的说法。算法简介(附录B.5.3)中,树T中节点X的深度定义为从T的根节点到X的简单路径(边数)的长度。节点Y的高度为从Y到叶子的最长向下简单路径上的边数。树的高度定义为其根节点的高度。
请注意,简单路径是没有重复顶点的路径。
树的高度等于树的最大深度。节点的深度和节点的高度不一定相等。参见Cormen等人的第3版的图B.6。为了说明这些概念。
我有时会遇到一个问题,要求人们计算节点(顶点)而不是边缘,所以如果你不确定在考试或面试期间是否应该计算节点或边缘,请要求澄清。
答案 3 :(得分:7)
我知道这很奇怪,但 Leetcode 也根据路径中的节点数定义了深度。所以在这种情况下,深度应该从 1(总是计算根)而不是 0 开始。以防有人像我一样有同样的困惑。
答案 4 :(得分:3)
简单回答:
深度:
1。 树:从根节点到树的叶节点的边数/弧称为树的深度。
2。 节点:从根节点到该节点的边数/弧被称为该节点的深度。
答案 5 :(得分:1)
Daniel A.A.的回答Pelsmaeker和Yesh的类比非常好。我想从hackerrank教程中添加更多内容。希望它也能有所帮助。
答案 6 :(得分:0)
理解这些概念的另一种方法如下: 深度:在根位置绘制一条水平线,并将此线视为地面。因此,根的深度为0,并且其所有子节点都向下增长,因此每个节点级别的当前深度为+。
高度:相同的水平线,但这次地面位置是外部节点,它是树的叶子并向上计数。
答案 7 :(得分:0)
我想发布这篇文章是因为我是一名本科CS学生,越来越多的人使用OpenDSA和其他开源教科书。似乎从最受好评的答案看,正在教授的高度和深度的方式已经从一代变为下一代,并且我发布了这一点,所以每个人都知道这种差异现在存在并且希望赢得了导致任何程序中的错误!感谢。
来自OpenDSA Data Structures & Algos book:
如果n 1 ,n 2 ,...,n k 是树中的一系列节点, n i 是1 <&lt; = i&lt; k的n i +1的父亲,然后这个序列 被称为从n 1 到n k 的路径。路径长度为k-1。 如果存在从节点R到节点M的路径,则R是其祖先 M和M是R的后代。因此,树中的所有节点都是 树的根的后代,而根是它的祖先 所有节点。 树中节点M的深度是 从树的根到M的路径。树的高度是一个 比树中最深节点的深度。深度为d的所有节点 在树的d级。根是0级唯一的节点,和 它的深度是0。
图7.2.1:二叉树。节点A是根。节点B和C是 一个孩子。节点B和D一起形成子树。节点B有 两个孩子:它的左孩子是空树,右孩子是 D.节点A,C和E是G.节点D,E和F的祖先 弥补树的2级;节点A的级别为0. A的边缘 从C到E到G形成长度为3的路径。节点D,G,H和I. 是叶子。节点A,B,C,E和F是内部节点。深度 我是3.这棵树的高度是4。
答案 8 :(得分:0)
节点的“深度”(或等效的“级别号”)是从根节点开始的“路径”上的边数
节点的“高度”是从节点到叶节点的最长路径上的边数。
答案 9 :(得分:-1)
树的整体深度等于树的高度和树的高度相同,但是如果对于特定节点高度不等于深度,因为深度 表示从根节点到该节点的最长路径,如果是 Height,则是从该节点到叶节点。
整体树,D=H=L 但对于一个节点 D=L 但 D 可能不等于 H。