Determinação da árvore de pesquisa binária (versão em linguagem C)

Sem mais delongas, vamos ao assunto:

Dada a sequência de travessia em ordem de uma árvore binária, pergunte se essa árvore binária é uma árvore binária de busca.

Definição de árvore de pesquisa binária: com base na definição de árvore binária, o domínio de dados do nó filho esquerdo é menor ou igual ao domínio de dados do nó raiz e o domínio de dados do nó filho direito é maior que os dados domínio do nó raiz.

Requisitos de entrada:

A primeira linha contém um inteiro n (1≤n≤50), indicando o número de nós na árvore binária de busca;

A segunda linha contém n inteiros ai (1≤ai≤100), representando a sequência de travessia em ordem. Os dados garantem que os elementos da sequência sejam distintos uns dos outros.

O resultado é semelhante a este

  1. Amostra 1

A árvore binária correspondente é mostrada abaixo, que é uma árvore binária de pesquisa.

  1. Amostra 2

A árvore binária correspondente é mostrada abaixo, não uma árvore binária de pesquisa.                                        

 código mostrado abaixo:

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

Acho que você gosta

Origin blog.csdn.net/endofdestruction/article/details/132070510
Recomendado
Clasificación