中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Validate Binary Search Tree的示例分析

發布時間:2022-01-15 14:39:43 來源:億速云 閱讀:134 作者:小新 欄目:編程語言

小編給大家分享一下Validate Binary Search Tree的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

Given a binary tree, determine if it is a valid binary search tree (BST).

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node's key.

  • The right subtree of a node contains only nodes with keys greater than the node's key.

  • Both the left and right subtrees must also be binary search trees.

解法一:

遞歸思想,遞歸先序遍歷,假定當前結點為root,其左子樹右下角節點為pre,右子樹左下角節點為next

情況一:root==NULL,return true

情況二:

root!=NULL,則判斷,

a)如果有左孩子,則如果root->left->val>=root->val ,則返回false;

b)如果比左子樹中右下角元素小,return false;

c)如果有右孩子,即如果root->right->val<=root->val,則返回false;

d)如果比右子樹左下角大,即如果next->val<=root->val,return false;

如果a,b,c,d都不為真,則說明,當前節點值比左孩子大,且比其前序節點值大,比右孩子小,且比后續節點值小,這時返回左子樹和右子樹的結果。

最后return BST(root->left)&&BST(root->right)

TreeNode* findpre(TreeNode *root){
        if(!root||!root->left)
            return NULL;
        TreeNode *p=root->left;
        while(p->right){
            p=p->right;
        }
        return p;
    }
    TreeNode* findnext(TreeNode *root){
        if(!root||!root->right)
            return NULL;
        TreeNode *p=root->right;
        while(p->left){
            p=p->left;
        }
        return p;
    }
    bool isValidBST(TreeNode* root) {
        if(!root)
            return true;
        if(root->left&&root->left->val>=root->val)
            return false;
        if(root->right&&root->right->val<=root->val)
            return false;
        TreeNode *pre=findpre(root),*next=findnext(root);
        if(pre&&pre->val>=root->val||next&&next->val<=root->val)
            return false;
        return isValidBST(root->left)&&isValidBST(root->right);
    }

解法二:

從解法一看出,其實只要保證,當前值比左子樹pre節點大,且比右子樹next節點值小即可,可以把a,b,這兩種情況注釋掉,但存在也是有一定用處的,可以首先判斷左右孩子,如果左右孩子都不滿足,則就不用找前序和后繼了。

bool isValidBST(TreeNode* root) {
        if(!root)
            return true;
        /*if(root->left&&root->left->val>=root->val)
            return false;
        if(root->right&&root->right->val<=root->val)
            return false;*/
        TreeNode *pre=findpre(root),*next=findnext(root);
        if(pre&&pre->val>=root->val||next&&next->val<=root->val)
            return false;
        return isValidBST(root->left)&&isValidBST(root->right);
    }

解法三:

其實,利用中序遍歷可以得到有序序列,只要當前節點比前一個節點大,即是BST,

bool isValidBSTCore(TreeNode *root,TreeNode *&pre){
        if(!root)
            return true;
        if(!isValidBSTCore(root->left,pre))//左子樹
            return false;
        if(pre&&pre->val>=root->val)//當前結點與前節點比較
            return false;
        pre=root;//修改pre
        return isValidBSTCore(root->right,pre);//右子樹
        
    }
    bool isValidBST(TreeNode* root) {
        if(!root)
            return true;
        TreeNode *pre=NULL;
        return isValidBSTCore(root,pre);
    }

看完了這篇文章,相信你對“Validate Binary Search Tree的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿坝| 共和县| 葫芦岛市| 古田县| 内丘县| 泗水县| 克拉玛依市| 灌阳县| 武山县| 于都县| 和硕县| 墨江| 迁西县| 涿州市| 瓦房店市| 休宁县| 涟水县| 平邑县| 江山市| 辉南县| 边坝县| 铜鼓县| 改则县| 大埔县| 孝义市| 清镇市| 石家庄市| 酒泉市| 乐至县| 泽州县| 怀宁县| 酉阳| 崇礼县| 呼伦贝尔市| 景泰县| 探索| 锦州市| 荥阳市| 石台县| 个旧市| 安顺市|