leetcode:98. 驗證二叉搜尋樹(C++)
阿新 • • 發佈:2018-11-11
給定一個二叉樹,判斷其是否是一個有效的二叉搜尋樹。
假設一個二叉搜尋樹具有如下特徵:
節點的左子樹只包含小於當前節點的數。
節點的右子樹只包含大於當前節點的數。
所有左子樹和右子樹自身必須也是二叉搜尋樹。
示例 1:
輸入:
2
/ \
1 3
輸出: true
示例 2:
輸入:
5
/ \
1 4
/ \
3 6
輸出: false
解釋: 輸入為: [5,1,4,null,null,3,6]。
根節點的值為 5 ,但是其右子節點值為 4 。
思路:利用二叉樹的中序遍歷把二叉樹的每一個節點存入一個數組,然後判斷該陣列是否是遞增的,是返回true,不是返回false
程式碼:
/** * 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: void midorder(TreeNode*root,vector<int>&arr) { if(root) { midorder(root->left,arr); arr.push_back(root->val); midorder(root->right,arr); } } bool isValidBST(TreeNode* root) { vector<int> arr; midorder(root,arr); for(int i=1;i<arr.size();i++) { if(arr[i]<=arr[i-1]) return false; } return true; } };