leetcode:Validate Binary Search Tree,leetcodevalidate

來源:互聯網
上載者:User

leetcode:Validate Binary Search Tree,leetcodevalidate

最開始我犯了個錯誤,直接遞迴判斷根節點的值是否在左孩子節點和右孩子節點值得中間,忽略了應該是根節點的值大於左子樹所有節點的值,小於右子樹所有節點的值,導致代碼如下:

bool isValidBST(TreeNode* root) {        if(root==NULL)            return true;        else if(root->left&&!root->right)            return isValidBST(root->left)&&(root->val>root->left->val);        else if(!root->left&&root->right)            return isValidBST(root->right)&&(root->val<root->right->val);        else if(root->left&&root->right)            return isValidBST(root->left)&&isValidBST(root->right)&&(root->val>root->left->val)&&(root->val<root->right->val);        else            return true;    }

這樣當測試案例為{10,5,15,#,#,6,20}就會出錯。所以在遞迴函式中應該加入更多的資訊,可以記錄當前根節點的取值區間,在遞迴計算時更新取值區間,這樣代碼如下:

bool check(TreeNode* root,long leftval, long rightval)    {        if(!root)            return true;        return (root->val>leftval)&&(root->val<rightval)&&check(root->left,leftval,root->val)&&check(root->right,root->val,rightval);    }    bool isValidBST(TreeNode* root) {        return check(root,LONG_MIN, LONG_MAX);    }

還有一個細節需要注意下,在leetcode的測試案例中,會把root的值設定為INT_MAX,所以我採用了long。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.