天天看點

力扣 驗證二叉搜尋樹力扣 驗證二叉搜尋樹

力扣 驗證二叉搜尋樹

題目描述

給你一個二叉樹的根節點 root ,判斷其是否是一個有效的二叉搜尋樹。

有效 二叉搜尋樹定義如下:

節點的左子樹隻包含 小于 目前節點的數。

節點的右子樹隻包含 大于 目前節點的數。

所有左子樹和右子樹自身必須也是二叉搜尋樹。

示例 1:

輸入:root = [2,1,3]

輸出:true

示例 2:

輸入:root = [5,1,4,null,null,3,6]

輸出:false

解釋:根節點的值是 5 ,但是右子節點的值是 4 。

思路分析

此題目需要保證任何節點的左子樹的最右邊的節點小于該節點,任何節點的右子樹的最左邊的節點大于該節點。

通過分析我們發現此題實際上是要求出中序周遊二叉樹的序列,然後判斷該序列是否為遞增序列即可。

代碼如下:

class Solution {
public:
    bool isValidBST(TreeNode* root) {
        stack<TreeNode*> s;
        vector<int>res;
        TreeNode* p=root;
        while(p!=nullptr||!s.empty()){
            while(p!=nullptr){
                s.push(p);
                p=p->left;
            }
            if(!s.empty()){
                p=s.top();
                res.push_back(p->val);
                s.pop();
                p=p->right;
            }
        }
        for(int i=0;i<res.size()-1;i++){
            if(res[i]>=res[i+1])return false;
        }
        return true;
    }
};
           

繼續閱讀