C++ 中平衡二叉树的数量
给定二叉树的高度 H。目标是找到给定高度的平衡二叉树的数量/计数。
二叉树 - 是一种树形数据结构,其中每个节点最多有两个子节点,分别是左子节点和右子节点。
高度平衡二叉树 - 定义为二叉树,其中每个节点的两个子树的深度之差仅为 1 或 0。即每个节点的左子树和右子树的高度差最大为 1。
下图包含了高度 h=3 的所有可能的平衡二叉树。
输入
Height H=2
输出
Count of Balanced Binary Trees of Height H is : 3
解释 - 给定图包含了高度 H=2 的所有可能的平衡树
输入
Height H=3
输出
Count of Balanced Binary Trees of Height H is : 15
下面程序中使用的思路如下
整数 H 用于表示二叉树的高度。
函数 countBTheight(int h) 以树的高度作为输入,并返回高度为 h 的所有可能的平衡二叉树的数量。
我们使用递归方法。
如果树的高度为 1,即它只有一个节点,则只有一个具有单个节点的树存在且它是平衡的。(if(h==1),返回 1)
否则,高度是左子树和右子树的高度之和,其高度比根节点小一或二。(平衡树的高度差为 1)。
函数返回计数作为结果。
示例
#include <iostream> int countBTheight(int h){ // One tree is possible with height 0 or 1 if (h == 0 || h == 1) return 1; return countBTheight(h-1) * (2 *countBTheight(h-2) + countBTheight(h-1)); } int main(){ int H = 4; std::cout << "Count of balanced binary trees of height H is: "<<countBTheight(H); }
输出
Count of balanced binary trees of height H is: 315
广告