91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

宿迁市| 沅江市| 丰原市| 合江县| 崇明县| 繁昌县| 西峡县| 淳安县| 嘉善县| 曲麻莱县| 甘谷县| 定陶县| 盱眙县| 吉木萨尔县| 醴陵市| 临江市| 大荔县| 深泽县| 蚌埠市| 德州市| 石屏县| 通道| 进贤县| 安溪县| 信丰县| 无棣县| 三穗县| 彭州市| 张掖市| 山阳县| 麟游县| 乐都县| 华阴市| 黄石市| 松原市| 共和县| 蓝山县| 正蓝旗| 沙雅县| 南平市| 通渭县|