给定一个二叉树(存储结构采用二叉链表表示),试设计算法判断该二叉树 是否为二叉平衡树,用递归创建二叉树,并用C语言完成
时间: 2023-08-22 13:05:53 浏览: 145
可以使用递归的方式遍历整个二叉树,对于每一个节点,分别计算其左右子树的高度,判断它们之间的高度差是否小于等于1。如果是,则递归检查其左右子树是否都是平衡的,如果是,则该二叉树为平衡树。
以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 获取二叉树的高度
int getHeight(TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
}
// 判断二叉树是否为平衡树
bool isBalanced(TreeNode* root){
if (root == NULL) {
return true;
}
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
if (abs(leftHeight - rightHeight) > 1) {
return false;
}
return isBalanced(root->left) && isBalanced(root->right);
}
// 递归创建二叉树
TreeNode* createTree() {
int val;
scanf("%d", &val);
if (val == -1) {
return NULL;
}
TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));
root->val = val;
root->left = createTree();
root->right = createTree();
return root;
}
int main() {
TreeNode *root = createTree();
if (isBalanced(root)) {
printf("The binary tree is balanced.\n");
} else {
printf("The binary tree is not balanced.\n");
}
return 0;
}
```
在上面的代码中,我们先定义了一个二叉树的结构体,然后分别实现了获取二叉树高度和判断二叉树是否为平衡树的函数。最后使用递归创建二叉树,并进行判断。
阅读全文