1. 程式人生 > >Leetcode98. Validate Binary Search Tree驗證二叉搜尋樹

Leetcode98. Validate Binary Search Tree驗證二叉搜尋樹

給定一個二叉樹,判斷其是否是一個有效的二叉搜尋樹。

假設一個二叉搜尋樹具有如下特徵:

  • 節點的左子樹只包含小於當前節點的數。
  • 節點的右子樹只包含大於當前節點的數。
  • 所有左子樹和右子樹自身必須也是二叉搜尋樹。

示例 1:

輸入: 2 / \ 1 3 輸出: true

示例 2:

輸入: 5 / \ 1 4   / \   3 6 輸出: false 解釋: 輸入為: [5,1,4,null,null,3,6]。   根節點的值為 5 ,但是其右子節點值為 4 。

class Solution {
public:
    bool isValidBST(TreeNode* root)
    {
        if(root == NULL)
            return true;
        if(!CheckLeft(root ->val, root ->left))
            return false;
        if(!CheckRight(root ->val, root ->right))
            return false;
        return isValidBST(root ->left) && isValidBST(root ->right);
    }

    bool CheckLeft(int val, TreeNode* root)
    {
        if(root == NULL)
            return true;
        if(root ->val >= val)
            return false;
        return CheckLeft(val, root ->left) && CheckLeft(val, root ->right);
    }

    bool CheckRight(int val, TreeNode* root)
    {
        if(root == NULL)
            return true;
        if(root ->val <= val)
            return false;
        return CheckRight(val, root ->left) && CheckRight(val, root ->right);
    }
};