判定顺序存储的二叉树是否为二叉搜索树,并用C语言描述算法
时间: 2024-09-06 09:05:24 浏览: 64
判断一个顺序存储的二叉树是否为二叉搜索树(Binary Search Tree,BST),可以采用递归的方式。首先定义两个辅助函数,`isBSTHelper`用于递归检查当前节点是否满足BST的性质以及左右子树都是BST,另一个函数`isBST`作为入口。
以下是C语言的示例算法:
```c
#include <stdio.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 辅助函数,用于递归检查BST性质
int isBSTHelper(TreeNode* node, int minVal, int maxVal) {
if (!node) return 1; // 空节点视为满足BST
if (node->val <= minVal || node->val > maxVal) {
return 0; // 越界,不是BST
}
// 递归检查左、右子树
return isBSTHelper(node->left, minVal, node->val - 1) &&
isBSTHelper(node->right, node->val + 1, maxVal);
}
// 主函数,判断顺序存储的二叉树是否为BST
int isBST(TreeNode* root) {
return isBSTHelper(root, INT_MIN, INT_MAX);
}
int main() {
// 测试代码(这里只提供一个简化的例子)
TreeNode* root = createTreeNode(4); // 假设已有一个创建好的根节点
// ... 先设置好二叉树结构 ...
if (isBST(root)) {
printf("The binary tree is a BST.\n");
} else {
printf("The binary tree is not a BST.\n");
}
return 0;
}
```
在这个算法中,`isBSTHelper`函数会从根节点开始,如果当前节点的值在其范围(minVal到maxVal)内并且其子树也满足BST条件,那么返回1表示当前节点是BST的一部分;反之,返回0表示不是BST。主函数`isBST`通过传入整数最小值和最大值(这里是负无穷和正无穷)来验证整个树是否为BST。
阅读全文