![]() |
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
但以下两棵树在结构上是不同的:
|
![]() |
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 6 月前 |
![]() |
Alisa Petrova · 在有向图中更改一对顶点以创建循环 6 月前 |
![]() |
b39b332d · 使用C++标准库实现高效间隔存储 10 月前 |
![]() |
Paul C · 在维基百科上,将二叉搜索树转换为排序链表的算法是否存在错误? 10 月前 |
![]() |
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 10 月前 |
![]() |
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 11 月前 |