一、题目描述
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:

输入:root = [2,1,3]
输出:true
示例 2:

输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。
提示:
树中节点数目范围在[1, 10^4] 内
-2^31 <= Node.val <= 2^31 - 1
二、C语言代码
根据二叉搜索树的性质,二叉搜索树的中序遍历后,结果为有序且从小到大,所以我们遍历二叉树,将结果保存到数组中,然后判断数组是否有序即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
bool isValidBST(struct TreeNode* root) { int returnSize = 0; int *res = (int *)malloc(10000 * sizeof(int)); if (res == NULL) { return false; }
traverse(root, res, &returnSize); for (int i = 0; i < returnSize - 1; i++) { if (res[i] >= res[i + 1]) { return false; } } return true; }
void traverse(struct TreeNode* root, int *res, int *returnSize) { if (root == NULL) { return; }
traverse(root->left, res, returnSize); res[*returnSize] = root->val; (*returnSize)++; traverse(root->right, res, returnSize); }
|