用C语言编写一个算法判定给定的二叉树是二叉排序树
时间: 2024-11-03 16:14:32 浏览: 27
在C语言中,判断一个二叉树是否是二叉排序树(Binary Search Tree,BST)通常通过递归的方式来进行。一个二叉排序树满足两个条件:对于每个节点,它的左子树中的所有节点值都小于该节点值,而右子树中的所有节点值都大于该节点值。
下面是一个简单的算法来实现这个功能:
```c
// 定义二叉树结构
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
int isBST(TreeNode* root) {
// 递归函数,检查根节点并递归地检查左右子树
return (root == NULL) || (isBSTHelper(root->left, -INFINITY, root->val) && isBSTHelper(root->right, root->val, INFINITY));
}
// 辅助函数,用于检查单侧的子树
int isBSTHelper(TreeNode* node, int lower, int upper) {
if (node == NULL) {
return 1; // 空节点视为满足条件
}
// 如果当前节点值不在范围内,则返回false
if (node->val < lower || node->val > upper) {
return 0;
}
// 递归检查左子树和右子树
return isBSTHelper(node->left, lower, node->val) && isBSTHelper(node->right, node->val, upper);
}
```
阅读全文