![]() |
1
5
有趣的问题!我相信答案是N阶乘! 给定一个树结构,只有一种方法可以填充二进制搜索树的键值。 因此,我们需要做的就是计算不同数量的堆。
这对应于数字1到N的排列。
找到最大元素的位置。左边的元素形成左子树,右边的元素形成右子树。这些子树是通过找到最大的元素并在那里分裂而递归形成的。 这就产生了一个堆,因为我们总是选择max元素,遍历该堆的顺序就是我们开始的排列。因此,我们有一种从堆到置换再返回的方法。
现在从35142开始,最大的是5,所以3是左子树,142是右子树。
在142中,4是最大的,1是左的,2是右的,所以我们得到
为此填写二进制搜索键的唯一方法是:
更正式的证明: 如果H N 是1…N上的堆数,那么我们就得到了 H N =Sum{L=0到N-1}H L *小时 N-1-升 (基本上我们选择最大值并分配给根。选择左子树的大小,并选择许多元素(左、右递归)。 现在,
如果H n
然后是H
=
|
![]() |
2
2
但以下两棵树在结构上是不同的:
|
![]() |
Zevvysan · 为什么我的打印函数之一要删除节点? 7 年前 |
|
user9573040 · 递归二叉树高度 7 年前 |
![]() |
Dipesh Desai · 在二叉树haskell中搜索值 7 年前 |
![]() |
ibrahim · “main”已停止工作-C++[开发人员++] 7 年前 |