一、题目描述

给你一个二叉树的根节点 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
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
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);
}

描述文字
© 2024 mengchao666 开心地使用 Stellar 主题,星际地球第
收集了 62 颗星星 ✧ 共 83.3k 粒星尘,好像写完一本 鲁迅 的《呐喊》了啊