LeetCode 面試題 04.05. 合法二叉搜索樹
題目描述
實現一個函數,檢查一棵二叉樹是否爲二叉搜索樹。
二叉搜索樹的定義:
針對每個節點來說
- 左子樹的所有節點的值比本身要小(等於也不行)
- 右子樹的所有節點的值比本身要打(等於也不行)
示例 1:
輸入:
2
/ \
1 3
輸出: true
示例 2:
輸入:
5
/ \
1 4
/ \
3 6
輸出: false
解釋: 輸入爲: [5,1,4,null,null,3,6]。
根節點的值爲 5 ,但是其右子節點值爲 4 。
解題思路
- 因爲涉及到非直連節點間的比較, 所以先將樹變成數組, 然後判斷是否有序就行了
- 採用中序遍歷
AC代碼
class Solution {
public:
vector<int>s;
void dfs(TreeNode* root) {
//中序遍歷
if (root) {
dfs(root->left);
s.push_back(root->val);
dfs(root->right);
}
}
bool isValidBST(TreeNode* root) {
dfs(root);
for (int i = 1; i < s.size(); i++)
//判斷是否遞增
if (s[i] <= s[i - 1])return false;
return true;
}
};