題目:驗證二叉搜索樹
給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。
假設一個二叉搜索樹具有如下特徵:
- 節點的左子樹只包含小於當前節點的數。
- 節點的右子樹只包含大於當前節點的數。
- 所有左子樹和右子樹自身必須也是二叉搜索樹。
示例 1:
輸入: 2 / \ 1 3 輸出: true
示例 2:
輸入: 5 / \ 1 4 / \ 3 6 輸出: false 解釋: 輸入爲: [5,1,4,null,null,3,6]。 根節點的值爲 5 ,但是其右子節點值爲 4 。
C語言解題(使用了網上大神的解法)
void inorderTraversal(struct TreeNode* root, int* returnSize, int* arr) {
if (root != NULL) {
inorderTraversal(root->left, returnSize, arr);
arr[(*returnSize)++] = root->val;
inorderTraversal(root->right, returnSize, arr);
}
}
int rSize(struct TreeNode* root) {
if (!root)
return 0;
return rSize(root->left) + rSize(root->right) + 1;
}
bool isValidBST(struct TreeNode* root) {
int size = rSize(root);
int* arr = (int*)malloc(sizeof(int)*size);
int returnSize = 0;
inorderTraversal(root, &returnSize, arr);
for (int i=0 ; i < size-1; i++) {
if (arr[i+1] <= arr[i])
return false;
}
return true;
}
中序遍歷,看值是否遞增。