Observations
我们考虑权值是 1 到 $n$ 的 BST,它具有下列性质:
若 $k$ 是一个非根叶子,且是个左儿子,则 $k$ 的父亲是 $k+1$ 。
证明:假设 $k$ 的父亲是 $p$ 且 $p \ne k + 1$,则 $p > k + 1$;显然 $k + 1$ 不可能是 $k$ 的祖先。
设 $k$ 和 $k + 1$ 的最近公共祖先是 $t$,则有 $k < t < k + 1$ 或者 $ k + 1 < t < k$,矛盾!
同理可证,若 $k$ 是一个非根的叶子,且是个右儿子,则 $k$ 的父亲是 $k - 1$ 。
注:上述性质也可以从「BST 的任意子树中 key 都是连续的」这个性质推出。
从而可以得出,striped BST 的所有叶子都是左儿子。
perfectly balanced BST 只有最后一层可能不满,其他层都是满的。
$n$ 个点的 perfectly balanced BST 的高度是 $\floor{\log n}$ 。
Q:是否只要满足
- 所有叶子节点都是左儿子
- 除了最后一层,每层都是满的
就一定存在一种填充权值的方案使得这棵树是一棵 perfectly balanced striped BST?
A:不是。
递推
有根树具有天然的递归结构。
容易看出,
- $n$ 个点的 perfectly balanced
- perfectly balanced striped BST 的任意子树也是 perfectly balanced striped BST。
- 可以把任意一棵 $k$ 个点的子树的权值范围变成 $1$ 到 $k$ 且保持其为 striped BST。换言之,我们只需要考虑权值从 1 开始的情形。
欲求 $n$ 个点的 perfectly balanced striped BST 的数量,可以枚举根节点的权值。一棵子树内的权值必定是连续的,根节点的权值确定后,根的左右子树的节点数就确定了。设根节点的权值是 $r$,则左子树中有 $r - 1$ 个点,权值范围是 $1$ 到 $r - 1$;右子树中有 $n - r$ 个点,权值范围是 $r + 1$ 到 $n$ 。左子树的根的权值的奇偶性须跟 $r$ 不同,右子树的根节点的权值须跟 $r$ 同奇偶。设右子树的根的权值是 $w$;在把右子树的权值平移到 $1$ 到 $n - r$ 以后,$w$ 对应于 $w - r$,$w$ 与 $r$ 同奇偶意味着 $w - r$ 是偶数。
对于 $n \ge 5$,$n$ 个点的 perfectly balanced striped BST 的根节点的左右两棵子树的高度都不小于 1 。从上一节得出的两必要条件可以推出,此时左右两子树都不是完美二叉树,这意味着二者高度相同。设 $n$ 个点的 perfectly balanced BST 的高度是 $h$,则根的左右子树的高度都是 $h - 1$ 。
将高度相同且根节点权值的奇偶性也相同的 perfectly balanced striped BST 的信息放在一个列表中,其中的元素是一个有序二元组:(节点数, 方案数)。