试写一个判别给定二叉树是否为二叉排序树的算法,设此二叉树以二叉链表作存储结构。且树中结点的关键字均不同。
时间: 2023-04-26 10:05:58 浏览: 298
写一算法,判断一棵二叉树是否是一棵二叉排序树。
算法如下:
1. 判断二叉树是否为空,若为空则为二叉排序树,返回 true。
2. 对于二叉树的每个结点,判断其左子树是否为空,若不为空,则递归判断其左子树是否为二叉排序树。若左子树不是二叉排序树,则返回 false。
3. 判断当前结点的关键字是否大于其左子树中的最大关键字,若不是,则返回 false。
4. 判断当前结点的右子树是否为空,若不为空,则递归判断其右子树是否为二叉排序树。若右子树不是二叉排序树,则返回 false。
5. 判断当前结点的关键字是否小于其右子树中的最小关键字,若不是,则返回 false。
6. 若以上条件均满足,则当前二叉树为二叉排序树,返回 true。
代码实现:
bool isBST(TreeNode* root) {
if (root == nullptr) {
return true;
}
if (root->left != nullptr) {
if (!isBST(root->left)) {
return false;
}
TreeNode* p = root->left;
while (p->right != nullptr) {
p = p->right;
}
if (p->val >= root->val) {
return false;
}
}
if (root->right != nullptr) {
if (!isBST(root->right)) {
return false;
}
TreeNode* p = root->right;
while (p->left != nullptr) {
p = p->left;
}
if (p->val <= root->val) {
return false;
}
}
return true;
}
阅读全文