判断一棵二叉树,是否是搜索二叉树

来源:互联网 发布:怀化学院教务网络管理 编辑:程序博客网 时间:2024/06/03 19:45

思路1  左子树得节点都比父节点小,右子树节点都比父节点大


    bool isValidBST(TreeNode *root) {     return checkValid(root,INT_MIN,INT_MAX);     }    bool checkValid(TreeNode* root,int low,int high){        if(root==NULL)            return true;        if(root->val<=low||root->val>=high)            return false;        return checkValid(root->left,low,root->val)&&checkValid(root->right,root->val,high);            }

思路2 : 用中序遍历,

递归: 用一个指针保留前一个结点的值

  TreeNode* pre=NULL;    bool isBST=true;public:    bool isValidBST(TreeNode *root) {    Inorder(root);         return isBST;    }    void Inorder(TreeNode* root){        if(root==NULL)            return;        Inorder(root->left);        if(pre&&pre->val >= root->val)            isBST = false;        pre=root;        Inorder(root->right);      }

中序遍历

非递归

    bool isValidBST(TreeNode *root) {        if(root==NULL)            return true;        TreeNode* pre=NULL;        stack<TreeNode*> treeStack;        while(!treeStack.empty()||root!=NULL){            while(root){                treeStack.push(root);                root=root->left;            }            if(!treeStack.empty()){                root=treeStack.top();                treeStack.pop();                if(pre&&pre->val >= root->val)                    return false;                pre=root;                root=root->right;            }        }        return true;    }


阅读全文
0 0
原创粉丝点击