设计算法判断一颗二叉树是否为二叉排序树 C语言
时间: 2023-08-22 17:04:22 浏览: 109
写一算法,判断一棵二叉树是否是一棵二叉排序树。
可以使用中序遍历二叉树,并判断遍历结果是否为升序排列。具体实现如下:
```c
#include <stdio.h>
#include <stdbool.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
void inorderTraversal(TreeNode* root, int* vals, int* idx) {
if (root == NULL) {
return;
}
inorderTraversal(root->left, vals, idx);
vals[(*idx)++] = root->val;
inorderTraversal(root->right, vals, idx);
}
bool isValidBST(TreeNode* root) {
int vals[10000];
int idx = 0;
inorderTraversal(root, vals, &idx);
for (int i = 1; i < idx; i++) {
if (vals[i] <= vals[i-1]) {
return false;
}
}
return true;
}
```
其中,`inorderTraversal` 函数用于中序遍历二叉树,将遍历结果存储在 `vals` 数组中,并使用 `idx` 变量记录当前遍历到的数组下标。`isValidBST` 函数则调用 `inorderTraversal` 函数,遍历二叉树并判断遍历结果是否为升序排列。如果是,则返回 `true`,否则返回 `false`。
阅读全文