假设二叉树中的每个结点值为单个字符,采用二叉链存储结构存储。设计一个算法, 判断一棵二叉树bt是否为完全二叉树。递归方法C++书写
时间: 2024-12-23 07:14:58 浏览: 8
二叉树的链式存储表示-数据结构课件第六章-树和二叉树
在二叉链表表示的二叉树中判断是否为完全二叉树,可以使用递归方法来实现。完全二叉树的特点是从根节点开始,除了最后一层外,每一层都是满的,并且所有叶子节点都在最右边。
以下是一个简单的C++递归函数来检查这个条件:
```cpp
#include <iostream>
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
bool isCompleteBinaryTree(TreeNode* bt) {
if (bt == NULL) { // 空树或只有一个节点的树都视为完全二叉树
return true;
}
// 如果当前节点的左孩子为空,说明当前层已经填满了
if (bt->left == NULL) {
return isCompleteBinaryTree(bt->right); // 递归检查右子树
} else if (bt->right != NULL && bt->left->right != NULL) { // 当前节点左右都有孩子,且右孩子的右孩子也存在
// 这意味着下一层还没有填满,检查下一层是否也是满的
return isCompleteBinaryTree(bt->right->right);
} else {
// 左孩子有右孩子而右孩子没有,或者两者都没有,这都不是完全二叉树
return false;
}
}
// 示例用途
int main() {
// 创建一个二叉树实例并设置其结构...
// 调用isCompleteBinaryTree(bt),其中bt指向二叉树的根节点
if (isCompleteBinaryTree(bt)) {
std::cout << "The tree is a complete binary tree.\n";
} else {
std::cout << "The tree is not a complete binary tree.\n";
}
return 0;
}
```
阅读全文