判断二叉树是否为二叉排序树,使用c语言实现
时间: 2023-11-20 13:52:40 浏览: 171
二叉排序树是一种特殊的二叉树,它的左子树中的所有节点的值都小于根节点的值,而右子树中的所有节点的值都大于根节点的值。因此,判断一棵二叉树是否为二叉排序树,需要对每个节点进行判断,其左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。以下是使用C语言实现判断二叉树是否为二叉排序树的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
bool isValidBST(TreeNode* root) {
return isValidBSTHelper(root, NULL, NULL);
}
bool isValidBSTHelper(TreeNode* root, TreeNode* minNode, TreeNode* maxNode) {
if (root == NULL) {
return true;
}
if ((minNode != NULL && root->val <= minNode->val) || (maxNode != NULL && root->val >= maxNode->val)) {
return false;
}
return isValidBSTHelper(root->left, minNode, root) && isValidBSTHelper(root->right, root, maxNode);
}
int main() {
// 构造二叉树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 5;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 1;
root->left->left = NULL;
root->left->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 4;
root->right->left = NULL;
root->right->right = NULL;
// 判断是否为二叉排序树
bool result = isValidBST(root);
if (result) {
printf("是\n");
} else {
printf("不是\n");
}
return 0;
}
```
阅读全文