我正在复习算法和数据结构。
我对树的深度与高度的概念感到困惑。在许多情况下,特别是在关注面试评估的网站上,在我看来,这些术语可以互换使用。
在我看来,基础文献将它们定义为适用于树的节点和不。
因此根(作为节点)的深度为0
。根(或任何子节点)的高度是其子节点的最大高度。
但是当你在树上应用这些术语,即找到树的最大深度时,似乎这些术语现在是“无意义的”并且可以互换使用,即找到最大深度只计算最大高度。
例如在这篇文章Check if tree is balanced中,答案集中在树的高度,而平衡的定义可能在树的深度上
我的理解是正确还是我搞砸了这些基本原理?
答案 0 :(得分:9)
在谈论树时,它们的意思相同:从根节点到叶节点的最长路径的长度。
答案 1 :(得分:7)
depth 通常用于描述树节点的属性,而 height 用于描述整个树的属性,如下例所示:
树的高度定义为其最深节点的深度。
答案 2 :(得分:4)
深度是“节点有多深”[或者距离根有多远]。高度是“树有多高”[或者离它的最远的叶子有多远]
形式上:
height(v) = 0 v is a leaf
max{height(u)|for every u such that u is a son of v} + 1 else
depth(v) = 0 v root
depth(u) + 1 where u is the parent of v else
编辑:当提到最大深度概念时,它与树的高度相同[在根处最大],你可以通过归纳证明它。
答案 3 :(得分:4)
节点的高度是从该节点到叶子的最长向下路径的长度。根的高度是 树的高度 。
节点的深度是其根路径的长度(即其根路径)。这在操纵各种自平衡树,特别是AVL树时通常是需要的。根节点具有深度零,叶节点具有高度零,并且仅具有单个节点的树(因此根和叶)具有深度和高度零。通常,空树(没有节点的树,如果允许的话)具有深度和高度-1。
答案 4 :(得分:0)
树的高度是遵循最长路径的从根到叶的节点数。 因此,如果我们有一个节点(root本身)height = 1 空树:0
任何节点的深度或级别是从根节点到该节点的边数。 所以..根的深度是0。
这样,树的最大深度比树的高度小一个。
答案 5 :(得分:0)
private static int getHeight(BTreeNode n){
if(n == null)
return 0;
int lHeight = getHeight(n.left);
int rheight = getHeight(n.right);
int height = 1+Math.max(lHeight,rheight);
return height;
}
答案 6 :(得分:0)
节点深度:是从根到节点的路径长度。 节点的高度:是从节点到最内层节点(叶子)的路径长度。
但是树的高度和深度是相同的。 树的高度=树的深度=最大高度=最大深度。
答案 7 :(得分:0)
在二进制搜索树中
答案 8 :(得分:0)
节点的高度是参考Leaf - 从源节点到叶节点的最长路径的长度。
节点的深度是参考根节点。 - 从源节点到根的总长度
但是当你一般性地谈论整棵树都指的是同一个时,它只有你在树中采用一个特定的节点才有所不同