判断一个给定二叉树是否为二叉搜索树
时间: 2023-09-19 08:09:28 浏览: 107
判别给定二叉树是否为二叉排序树
4星 · 用户满意度95%
要判断一个二叉树是否为二叉搜索树,需要满足以下条件:
1. 左子树的所有节点的值都小于根节点的值。
2. 右子树的所有节点的值都大于根节点的值。
3. 对于每个节点,它的左子树和右子树都是二叉搜索树。
基于上述条件,可以采用中序遍历二叉树的方式,如果得到的序列是有序的,则说明这是一棵二叉搜索树。具体实现方法如下:
```
class Solution {
public:
bool isValidBST(TreeNode* root) {
stack<TreeNode*> s;
TreeNode* cur = root;
TreeNode* pre = nullptr;
while (cur != nullptr || !s.empty()) {
while (cur != nullptr) {
s.push(cur);
cur = cur->left;
}
cur = s.top();
s.pop();
if (pre != nullptr && pre->val >= cur->val) {
return false;
}
pre = cur;
cur = cur->right;
}
return true;
}
};
```
其中,使用一个栈来辅助进行中序遍历,每次取出栈顶元素时,判断当前节点是否大于前一个节点,如果不是,则不是一棵二叉搜索树。最终,如果遍历完整个二叉树,仍然没有发现问题,则说明这是一棵二叉搜索树。
阅读全文