什么是二叉排序树,试写出下列算法代码: (1)构建二叉排序树。 (2)判断一棵树为二叉排序树C语言
时间: 2024-12-22 16:10:28 浏览: 30
二叉排序树(Binary Search Tree,BST),也称为二叉查找树,是一种特殊的二叉树结构,其左子节点的值总是小于根节点的值,右子节点的值总是大于根节点的值。这种特性使得在二叉排序树中搜索、插入和删除操作的时间复杂度通常为O(log n),n为树中节点的数量。
以下是构建二叉排序树的基本步骤:
1. 如果输入序列为空,则返回空树。
2. 选择序列中的第一个元素作为根节点。
3. 对于剩余的元素,按照BST规则递归地在其左子树或右子树中插入。
下面是一个简单的C语言实现:
```c
// 定义二叉树节点结构体
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 构建二叉排序树函数
Node* buildTree(int arr[], int start, int end) {
if (start > end)
return NULL; // 当数组为空或只有一个元素时,返回NULL
// 找到中间元素作为根节点
int mid = (start + end) / 2;
Node* root = (Node*)malloc(sizeof(Node));
root->data = arr[mid];
root->left = buildTree(arr, start, mid - 1);
root->right = buildTree(arr, mid + 1, end);
return root;
}
```
至于判断一棵树是否为二叉排序树(即满足BST性质),可以采用递归的方式检查每个节点:
```c
int isValidBST(Node* root, int minVal, int maxVal) {
if (root == NULL)
return 1;
if (root->data <= minVal || root->data >= maxVal)
return 0;
if (!isValidBST(root->left, minVal, root->data - 1) ||
!isValidBST(root->right, root->data + 1, maxVal))
return 0;
return 1;
}
bool isBST(Node* root) {
return isValidBST(root, INT_MIN, INT_MAX);
}
```
阅读全文