二叉查找树的判定(C语言版)

话不多说,上题目:

现有一棵二叉树的中序遍历序列,问这棵二叉树是否是二叉查找树。

二叉查找树的定义:在二叉树定义的基础上,满足左子结点的数据域小于或等于根结点的数据域,右子结点的数据域大于根结点的数据域。

输入要求:

第一行一个整数n(1≤n≤50),表示二叉查找树的结点个数;

第二行n个整数ai(1≤ai≤100),表示中序遍历序列。数据保证序列元素互不相同。

类似于结果这样

  1. 样例1

对应的二叉树如下所示,是二叉查找树。

  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;}

猜你喜欢

转载自blog.csdn.net/endofdestruction/article/details/132070510
今日推荐