话不多说,上题目:
现有一棵二叉树的中序遍历序列,问这棵二叉树是否是二叉查找树。
二叉查找树的定义:在二叉树定义的基础上,满足左子结点的数据域小于或等于根结点的数据域,右子结点的数据域大于根结点的数据域。
输入要求:
第一行一个整数n(1≤n≤50),表示二叉查找树的结点个数;
第二行n个整数ai(1≤ai≤100),表示中序遍历序列。数据保证序列元素互不相同。
类似于结果这样
- 样例1
对应的二叉树如下所示,是二叉查找树。
- 样例2
对应的二叉树如下所示,不是二叉查找树。
代码如下:
#include <stdio.h>
#define MAXN 50
int n, a[MAXN], cnt = 0;
int isBST() {
for (int i = 1; i < n; i++) {
if (a[i] < a[i - 1])
return 0;
}
return 1;}int isBSTree(int L, int R) {
if (L > R)
return 1;
int i = L, j = R;
while (i <= R && a[i] <= a[L])
i++;
while (j > L && a[j] >= a[L])
j--;
if (i - j != 1)
return 0;
return isBSTree(L + 1, j) && isBSTree(i, R);}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
if (!isBST()) {
printf("No\n");
return 0;
}
printf(isBSTree(0, n - 1) ? "Yes\n" : "No\n");
return 0;}