【发布时间】:2011-01-13 15:57:51
【问题描述】:
我似乎无法为此找到明确的答案,我正在尝试对堆做一些基本的证明,但这就是让我有点失望的原因:
空树有效吗?如果有,它的高度是多少?
我认为这将是 0。
具有单个节点的树的高度是多少?
我认为这将是 1,但我已经看到它是 0 的定义(如果是这种情况,那么我不知道如何解释一棵空树)。
【问题讨论】:
标签: math data-structures tree heap
我似乎无法为此找到明确的答案,我正在尝试对堆做一些基本的证明,但这就是让我有点失望的原因:
空树有效吗?如果有,它的高度是多少?
我认为这将是 0。
具有单个节点的树的高度是多少?
我认为这将是 1,但我已经看到它是 0 的定义(如果是这种情况,那么我不知道如何解释一棵空树)。
【问题讨论】:
标签: math data-structures tree heap
【讨论】:
我认为你应该看看 NIST 网站上的 Dictionary of Algorithms and Data Structures。有definition for height 表示单个节点的高度为0。
definition of a valid tree 确实包含一个空结构。该网站没有提到这种树的高度,但根据高度的定义,它也应该是0。
【讨论】:
我已经看到它以两种方式使用(将单个节点计为 0 或 1),但大多数来源会将仅根树定义为高度为 0 的树,并且不会考虑 0 节点树有效。
【讨论】:
如果你的树是一个递归定义的数据结构,它可能是空的,也可能是一个带有左右子树的节点(例如搜索树或你的堆),那么自然定义就是将 0 分配给空树并且1 + 最高子树到非空树的高度。
如果您的树是图,那么自然定义是从根到叶的最长路径,因此仅根树的深度为 0。在这种情况下,您通常甚至不会考虑空树。
【讨论】:
树的高度是其任一子节点到终端节点的最长路径的长度。
维基百科说the height of an empty tree is -1。我不同意。一棵空树实际上只是一棵包含一个终端节点的树(一个空值或表示一棵空树的特殊值)。由于节点没有子节点,其最长路径的长度必须为empty sum = 0,而不是-1。
同样,一棵非空树有两个孩子,所以根据定义,至少有一个路径 >= 1 到一个终端节点。
我们可以这样定义我们的树:
type 'a tree =
| Node of 'a tree * 'a * 'a tree
| Nil
let rec height = function
| Node(left, x, right) -> 1 + max (height left) (height right)
| Nil -> 0
【讨论】:
根据Wikipedia,只有一个节点的(子)树的高度为0。没有节点的树的高度为-1。但我认为这取决于你,你如何定义高度,你的证明应该适用于任何一个定义。
【讨论】:
实际上,树的高度的完美定义是从根开始的 d 最长路径的叶子的 d 级别加上 1..accordin 2 这个定义 fa 树是空的,它不会有任何级别 nv 不能认为它为零,因为级别根的零..所以空树级别是-1,而不是accordin 2定义它的-1 + 1 = 0..所以空树的零sd高度...bt n很多书他们给了-1 bt没有解释给定的
【讨论】: