LeetCode---Validate Binary Search Tree

本文介绍了一种通过中序遍历判断一棵二叉树是否为有效二叉搜索树的方法。利用二叉搜索树的特性,确保左子树的值小于根节点,右子树的值大于根节点,并且整个中序遍历结果为递增序列。

题目大意:给出一颗二叉树,判断其是否是一颗有效的二叉搜索树。

算法思想:

二叉搜索树的性质:

1.左子树的节点值都小于根节点的节点值。

2右子树的节点值都大于根节点的节点值

3.左右子树又都是二叉搜索树。

4.中序遍历二搜索树,遍历结果为单调递增的序列。

利用第四条性质来判断是否是二叉搜索树即可。这里用一个容器存储中序遍历二叉树的结果,当容器不空且最后一个元素大于将要放入的元素时说明该树不是二叉搜索树。

中序遍历算法:非递归中序遍历

代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isValidBST(TreeNode* root) {
        if(root==NULL||(root->left==NULL&&root->right==NULL)) return true;
        vector<int> res;
        TreeNode* p=root;
        stack<TreeNode*> S;
        while(p!=NULL||!S.empty()){
            while(p!=NULL){
                S.push(p);
                p=p->left;
            }
            if(!S.empty()){
                p=S.top();
                S.pop();
                if(res.size()!=0&&res.back()>=p->val)
                    return false;
                res.push_back(p->val);
                p=p->right;   
            }
        }
        return true;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值