【发布时间】:2020-10-10 19:17:31
【问题描述】:
编译此代码时,编译器不会返回任何警告或错误,但代码根本不起作用。
inserirDado 函数应该递归地创建节点并在节点上存储值,在 node.valor,应用我之前设置的条件。
void inserirDado(struct node **no, int numero)
{
if(*no == NULL) { //Se nao houver um nodo anterior, o primeiro numero se torna RAIZ.
* no = (struct node *) malloc(sizeof(struct node));
(*no)->direita = NULL;
(*no)->esquerda = NULL;
(*no)->valor = numero;
}else{ //Caso contrario, a definicao do numero, se entrara no nodo esquerdo ou direito.
if (numero < (*no)->valor) {
inserirDado(&(*no)->esquerda, numero);
}
else
{
inserirDado(&(*no)->direita, numero);
}
}
}
在 emOrdem 处,函数会调用自身直到它到达叶子节点,然后它应该打印存储在 node.valor 中的值:
void emOrdem(struct node *no)
{
if(no != NULL)
{
emOrdem(no->esquerda);
printf("%i", no->valor);
emOrdem(no->direita);
}
}
完整代码为:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int valor;
struct node *esquerda;
struct node *direita;
};
void inserirDado(struct node **no, int numero);
void emOrdem(struct node *no);
int main(void) {
struct node **arvore1;
inserirDado(arvore1, 4);
inserirDado(arvore1, 2);
inserirDado(arvore1, 3);
inserirDado(arvore1, 10);
emOrdem(*arvore1);
}
//Funcao de colocar um numero aleatoria dentro de um Node.
//Ao fazer isso com varios numeros, serao criados nodos com descendentes.
void inserirDado(struct node **no, int numero)
{
if(*no == NULL) { //Se nao houver um nodo anterior, o primeiro numero se torna RAIZ.
* no = (struct node *) malloc(sizeof(struct node));
(*no)->direita = NULL;
(*no)->esquerda = NULL;
(*no)->valor = numero;
}else{ //Caso contrario, a definicao do numero, se entrara no nodo esquerdo ou direito.
if (numero < (*no)->valor) {
inserirDado(&(*no)->esquerda, numero);
}
else
{
inserirDado(&(*no)->direita, numero);
}
}
}
void emOrdem(struct node *no)
{
if(no != NULL)
{
emOrdem(no->esquerda);
printf("%i", no->valor);
emOrdem(no->direita);
}
}
【问题讨论】:
标签: c pointers binary-tree