题目:验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 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;
}
中序遍历,看值是否递增。