Détermination de l'arbre de recherche binaire (version langage C)

Sans plus attendre, revenons au sujet :

Étant donné la séquence de parcours dans l'ordre d'un arbre binaire, demandez-vous si cet arbre binaire est un arbre de recherche binaire.

Définition de l'arbre de recherche binaire : sur la base de la définition de l'arbre binaire, le domaine de données du nœud enfant gauche est inférieur ou égal au domaine de données du nœud racine et le domaine de données du nœud enfant droit est supérieur aux données. domaine du nœud racine.

Exigences de saisie :

La première ligne contient un entier n (1≤n≤50), indiquant le nombre de nœuds dans l'arbre de recherche binaire ;

La deuxième ligne contient n entiers ai (1≤ai≤100), représentant la séquence de parcours dans l'ordre. Les données garantissent que les éléments de séquence sont distincts les uns des autres.

Le résultat est similaire à celui-ci

  1. Échantillon 1

L'arbre binaire correspondant est présenté ci-dessous, qui est un arbre de recherche binaire.

  1. Échantillon 2

L'arbre binaire correspondant est tel qu'indiqué ci-dessous, et non un arbre de recherche binaire.                                        

 le code s'affiche comme ci-dessous :

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

Je suppose que tu aimes

Origine blog.csdn.net/endofdestruction/article/details/132070510
conseillé
Classement