用c语言,写一个递归算法,判断二叉树是否为二叉排序树
时间: 2024-10-16 19:20:00 浏览: 38
写一算法,判断一棵二叉树是否是一棵二叉排序树。
在C语言中,我们可以编写一个递归函数来判断一个二叉树是否为二叉排序树(BST)。二叉排序树的特性是对于每个节点,其左子树中的所有元素都小于该节点,而右子树的所有元素都大于该节点。
以下是一个简单的示例,假设我们有一个结构体`Node`表示二叉树节点:
```c
#include <stdio.h>
typedef struct Node {
int val;
struct Node* left;
struct Node* right;
} Node;
int isBST(Node* root) {
if (root == NULL) { // 基本情况,空树是BST
return 1;
}
if (root->left != NULL && root->val <= root->left->val) { // 非递归检查左子树
return 0;
}
if (root->right != NULL && root->val >= root->right->val) { // 非递归检查右子树
return 0;
}
// 递归检查左右子树
return isBST(root->left) && isBST(root->right);
}
```
这个`isBST`函数首先检查根节点,然后递归地对左右子树进行同样的检查。如果任何一次违反了二叉排序树的规则(即左子树元素大于当前节点值,或右子树元素小于当前节点值),则返回`0`,表示不是BST;否则,继续递归直到所有子树都通过检查,返回`1`。
阅读全文