LeetCode: 98. 驗證二叉搜尋樹(C++)
阿新 • • 發佈:2018-12-24
題目:
給定一個二叉樹,判斷其是否是一個有效的二叉搜尋樹。
一個二叉搜尋樹具有如下特徵:
- 節點的左子樹只包含小於當前節點的數。
- 節點的右子樹只包含大於當前節點的數。
- 所有左子樹和右子樹自身必須也是二叉搜尋樹。
示例 1:
輸入:
2
/ \
1 3
輸出: true
示例 2:
輸入:
5
/ \
1 4
/ \
3 6
輸出: false
解釋: 輸入為: [5,1,4,null,null,3,6]。
根節點的值為 5 ,但是其右子節點值為 4 。
解答:
可以利用中序遍歷解決,二叉搜尋樹的終須遍歷必然是一個遞增序列,將不對的情況一一排除即可。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isValidBST(TreeNode* root) { //這個要中序遍歷 //順序不對就是false //記得NULL if (root == NULL) { return true; } if (!isValidBST(root->left)) { return false; } if (pre && pre->val >= root->val) { return false; } pre = root; if(!isValidBST(root->right)) { return false; } return true; } private: //這個用於儲存中序遍歷的上一個節點 TreeNode* pre; };