假设二叉树每个结点的元素均为一个单字符,根据给定的字符序列按照先序遍历的顺序递归创建该树的二叉链表,然后判断该二叉树是否为二叉排序树。
时间: 2024-05-02 08:16:11 浏览: 154
根据先序遍历的顺序递归创建二叉树的过程如下:
1. 如果当前字符为 '\0',则返回 NULL。
2. 创建一个新结点,值为当前字符。
3. 递归创建左子树,将左子树的根结点作为当前结点的左孩子。
4. 递归创建右子树,将右子树的根结点作为当前结点的右孩子。
5. 返回当前结点。
判断该二叉树是否为二叉排序树的方法如下:
1. 对于每个结点,其左子树中所有结点的值都小于当前结点的值,其右子树中所有结点的值都大于当前结点的值。
2. 对于每个结点,其左子树和右子树都是二叉排序树。
下面是实现该算法的 C++ 代码:
```cpp
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
struct TreeNode {
char val;
TreeNode *left, *right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* createTree(char* s, int& pos) {
if (s[pos] == '\0') return NULL;
TreeNode* root = new TreeNode(s[pos]);
root->left = createTree(s, ++pos);
root->right = createTree(s, ++pos);
return root;
}
bool isBST(TreeNode* root, char min_val, char max_val) {
if (root == NULL) return true;
if (root->val <= min_val || root->val >= max_val) return false;
return isBST(root->left, min_val, root->val) && isBST(root->right, root->val, max_val);
}
bool isValidBST(TreeNode* root) {
return isBST(root, -128, 127);
}
int main() {
char s[1000];
scanf("%s", s);
int pos = 0;
TreeNode* root = createTree(s, pos);
if (isValidBST(root)) {
printf("The binary tree is a binary search tree.\n");
} else {
printf("The binary tree is not a binary search tree.\n");
}
return 0;
}
```
其中,createTree() 函数用于递归创建二叉树,isBST() 函数用于判断是否为二叉排序树,isValidBST() 函数用于调用 isBST() 函数判断整个二叉树是否为二叉排序树。
阅读全文