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
- Amostra 1
A árvore binária correspondente é mostrada abaixo, que é uma árvore binária de pesquisa.
- 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;}