用C语言写一个方法来辨别二叉树是否为二叉排序树
时间: 2024-09-16 10:04:50 浏览: 56
写一算法,判断一棵二叉树是否是一棵二叉排序树。
在C语言中,我们可以创建一个函数来判断一棵二叉树是否为二叉排序树(BST)。BST的特点是对于每个节点,其左子树的所有节点值都小于该节点,而右子树的所有节点值都大于该节点。下面是一个递归的例子:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 判断给定的二叉树是否为BST
bool isBST(TreeNode* root) {
if (root == NULL) { // 空树或者根节点为空都是BST
return true;
}
// 左子树所有节点值应小于当前节点值
if (!isBST(root->left) || root->val <= root->left->val) {
return false;
}
// 右子树所有节点值应大于当前节点值
if (!isBST(root->right) || root->val >= root->right->val) {
return false;
}
// 如果以上条件都满足,则继续检查下一个节点
return true;
}
// 测试示例
int main() {
// 创建一个简单的BST并测试isBST函数
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 4;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 6;
root->right->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right->left->val = 5;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = NULL;
if (isBST(root)) {
printf("The tree is a BST.\n");
} else {
printf("The tree is not a BST.\n");
}
free(root);
return 0;
}
阅读全文