另一种二叉搜索树的节点公式
Node formula of a different kind of binary search tree
我正在尝试查找树中定义如下的最大节点数:
根最多可以有 2 个孩子。左侧的每个子树最多可以有 L 个子树。右侧的每个子树最多可以有 R 个子树。
我知道在二叉树中查找节点数的公式是 2^h-1,其中 h 是树中的级别数量。
通俗地说,如何看待这个问题?(我不是很数学。
所以更正式地说,你试图在二叉搜索树中查找节点数,使得树的根有两个子树,左边的每个子树最多有 l 个子树,右边的每个子树都有 r 个子子树。
我们可以分别考虑左树和右树,因为它们不会影响彼此的高度。不考虑根,我们调用根的左子树 L,让我们调用根的右子树 R。 L 保持不变性,即 L 中的每个节点不能有超过 l 个子节点。同样,R 中的每个节点不能超过 r 个子节点。
让我们构造两个函数 b 和 c,它们取高度 h 并分别输出 L 或 R 中的最大节点数。
b(h) = if h = 1 then 1 else l * b(h - 1)
c(h) = if h = 1 then 1 else r * b(h - 1)
现在,我们可以构造函数 a,它取高度 h 并输出您定义的树的最大节点数。
a(h) = if h = 1 then 1 else (b(h - 1) + c(h - 1))
现在,我们想为 a 找到一个封闭的形式。让我们从找到 b 和 c 的封闭形式开始。
给定正高度 h,因为 l 被重复相乘,除了第一种情况,
b(h) = l^(h - 1)
c(h) = r^(h - 1)
a(h) = if h = 1 then 1 else (l^(h - 1) + r^(h - 1))
我不确定您是否还想在 a 的封闭形式中考虑 h = 1,但给定 h> 1,查找您定义的二叉搜索树的最大节点数的公式为
l^(h - 1) + r^(h - 1)
相关文章:
- C++二叉搜索树模板从函数返回节点
- 二叉搜索树使用最常用的节点来打印出某些语句
- 返回二叉搜索树特定级别的节点数的函数
- 无法打印完整的二叉搜索树,因为我从最低节点向后迭代的逻辑有缺陷
- 使用二进制搜索树中的迭代器对象访问左侧节点
- C++ Eclipse:二叉搜索树节点>数据=变量似乎不起作用
- 删除节点方法实际上不会删除二叉搜索树中的节点.C++
- 在C++中实现二叉搜索树,搜索不起作用.尝试打印节点的元素会导致输出崩溃
- 二叉搜索树按级别递归C++打印节点
- 插入到二叉搜索树中.节点替换
- 如何替换二叉搜索树中的节点
- C++ 从二叉搜索树中删除具有两个子节点的特定节点
- 检查节点是否是二进制搜索树的根
- 在二进制搜索树中删除节点
- 如何从二进制搜索树中删除节点
- 从C++二进制搜索树中删除一个节点(类而非结构)
- 从基于矢量的二叉搜索树中删除节点的最佳方法
- 为什么我的原始二叉搜索树被修改,即使我在另一个节点中复制了根节点
- 为什么这个计算二进制搜索树中节点的递归函数总是返回比预期更大的结果
- 二进制搜索树中的根节点为空