template <class ElemType> bool IsBBTHelp(BinTreeNode<ElemType> *r,int &h) // 操作结果: 判断以r为根的二叉排序树是否为平衡二叉树, h表示二叉排序树的深度 { } template <class ElemType, class KeyType> bool IsBBT(const BinarySortTree<ElemType, KeyType> &t) // 操作结果: 判断二叉排序树是否为平衡二叉树 { int h; return IsBBTHelp((BinTreeNode<ElemType> *)t.GetRoot(), h); }
时间: 2023-06-27 07:05:47 浏览: 101
这是一个判断二叉排序树是否为平衡二叉树的函数模板。其中,IsBBTHelp是一个递归函数,用于计算以r为根节点的二叉排序树的深度,并判断其是否为平衡二叉树。而IsBBT则是调用IsBBTHelp函数来判断整个二叉排序树是否为平衡二叉树。
具体来说,IsBBTHelp函数的实现如下:
```cpp
template <class ElemType>
bool IsBBTHelp(BinTreeNode<ElemType> *r, int &h) {
if (r == nullptr) { // 空树是平衡二叉树
h = 0;
return true;
}
int lh, rh; // 左右子树的深度
if (IsBBTHelp(r->leftChild, lh) && IsBBTHelp(r->rightChild, rh)) { // 分别判断左右子树是否平衡
if (abs(lh - rh) <= 1) { // 左右子树深度差不超过1,则以r为根的二叉排序树为平衡二叉树
h = max(lh, rh) + 1; // 更新以r为根的二叉排序树的深度
return true;
}
}
return false; // 否则不是平衡二叉树
}
```
而IsBBT函数的实现就非常简单了,只需要调用IsBBTHelp函数即可:
```cpp
template <class ElemType, class KeyType>
bool IsBBT(const BinarySortTree<ElemType, KeyType> &t) {
int h;
return IsBBTHelp((BinTreeNode<ElemType> *)t.GetRoot(), h);
}
```
其中,t.GetRoot()返回二叉排序树的根节点,强制转换为BinTreeNode<ElemType>*类型后传给IsBBTHelp函数。最终返回的结果就是整个二叉排序树是否为平衡二叉树。
阅读全文