我正在尝试编写一个递归函数来预先打印出值。但是,出于某种原因,它与我的inOrder函数保持打印相同。 postOrder函数工作正常,但我不得不对那个函数做一些略微不同的递归函数。你们可以看看我下面的代码,让我知道什么是错的吗?我真的很感激因为这一直给我带来麻烦。提前致谢
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#define TRUE 1
#define FALSE 0
typedef struct bnodestruct
{
int value;
struct bnodestruct *left;
struct bnodestruct *right;
}bnode;
typedef bnode *bnodePtr;
void displayMenu();
void insert (bnodePtr *hd, int val);
void inOrder(bnodePtr hd);
void preOrder(bnodePtr hd);
void postOrder(bnodePtr hd);
void empty (bnodePtr *hd);
int main (int argc, char **argv)
{
int val;
bnodePtr head;
head = NULL;
char option;
int result = 0;
while(1)
{
displayMenu();
printf("Choose an option : ");
scanf("\n%c", &option);
/*printf("The option chosen is %c\n", option);*/
switch (option)
{
case 'q':
printf("The program is exiting...\n");
exit(-1);
case 'i':
printf("Enter an integer value to be inserted into the linked list : ");
scanf("%d", &val);
insert(&head, val);
break;
case 'o':
inOrder(head);
break;
case 'n':
preOrder(head);
break;
case 'p':
postOrder(head);
break;
case 'e':
empty(&head);
/*inOrder (head);*/
break;
}
}
}
void displayMenu()
{
printf("\n Menu \n");
printf("(q): quit the program\n");
printf("(i): insert integer value into the binary tree\n");
printf("(e): empty all values from the binary tree\n");
printf("(o): list the items contained in the binary tree in order\n");
printf("(n): list the items contained in the binary tree in pre order\n");
printf("(p): list the items contained in the binary tree in post order\n");
}
void insert (bnodePtr *hd, int val)
{
if (*hd == NULL)
{
*hd = (bnodePtr)malloc(sizeof(bnode));
(*hd)->left = NULL;
(*hd)->value = val;
(*hd)->right = NULL;
}
else
{
if (val < ((*hd)->value))
insert (&((*hd)->left), val);
else if (val > ((*hd)->value))
insert (&((*hd)->right), val);
}
}
void empty (bnodePtr *hd)
{
bnodePtr temp1 = *hd;
bnodePtr temp2;
while (temp1 != NULL)
{
temp2 = temp1;
temp1 = temp1->left;
free (temp2);
}
*hd = NULL;
}
void inOrder (bnodePtr hd)
{
if (hd != NULL)
{
inOrder(hd->left);
printf("%d\n", hd->value);
inOrder(hd->right);
}
}
void preOrder (bnodePtr hd)
{
if (hd != NULL)
{
printf("%d\n", hd->value);
preOrder(hd->left);
preOrder(hd->right);
}
}
void postOrder (bnodePtr hd)
{
if (hd != NULL)
{
inOrder(hd->left);
inOrder(hd->right);
printf("%d\n", hd->value);
}
}
答案 0 :(得分:3)
void postOrder (bnodePtr hd)
{
if (hd != NULL)
{
inOrder(hd->left); // XXX
inOrder(hd->right); // XXX
printf("%d\n", hd->value);
}
}
那就是你的问题。您正在呼叫inOrder
,您应该拨打postOrder
。