编程二叉树preOrder功能

时间:2012-11-26 02:06:07

标签: c tree binary-tree preorder

我正在尝试编写一个递归函数来预先打印出值。但是,出于某种原因,它与我的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);

    }



}

1 个答案:

答案 0 :(得分:3)

void postOrder (bnodePtr hd)
{
    if (hd != NULL)
    {
        inOrder(hd->left);  // XXX
        inOrder(hd->right); // XXX
        printf("%d\n", hd->value);
    }
}

那就是你的问题。您正在呼叫inOrder,您应该拨打postOrder