使用c完成判别给定的二叉树是否为二叉排序树,设此二叉树以二叉链表存储,且树中结点的关键字均不相同
时间: 2024-12-23 20:22:52 浏览: 5
在C语言中,判断一个二叉树是否为二叉排序树(BST,Binary Search Tree),通常我们会采用递归的方式遍历树节点,并检查每个节点的值是否满足BST的性质:即对于任意节点,其左子树中的所有节点值都小于该节点的值,而右子树中的所有节点值都大于该节点的值。
以下是基本的步骤:
1. 定义一个函数`isBST(node *root)`,其中`node`是一个结构体,包含指向下个节点的指针(left、right)、以及当前节点的值(key)。
2. 对于空树或叶节点,直接返回`true`,因为它们本身就是有效的BST。
3. 如果当前节点的值小于其子节点的值,说明违反了BST规则,返回`false`。
4. 分别对左右子节点递归调用`isBST()`,如果两者都返回`true`,则当前节点也是BST的一部分,返回`true`。
5. 如果在任一阶违背规则,就返回`false`。
```c
// 假设有一个二叉树节点定义如下:
typedef struct TreeNode {
int key;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
int isBST(TreeNode* root) {
return helper(root, INT_MIN, INT_MAX);
}
int helper(TreeNode* node, int lower, int upper) {
if (node == NULL)
return 1; // 空节点视为BST
if (node->key <= lower || node->key > upper)
return 0; // 越界,不是BST
// 左子树检查
if (!helper(node->left, lower, node->key - 1))
return 0;
// 右子树检查
if (!helper(node->right, node->key + 1, upper))
return 0;
return 1;
}
```
阅读全文