回 帖 发 新 帖 刷新版面

主题:树的遍历出问题了,大家帮我看看

#include<stdlib.h>//treemanual.h"//
typedef struct node
{
    int data;
    struct node *leftchild;
    struct node *rightchild;
}BinTree;

void Initiate(BinTree **root)
{
    *root = new BinTree;
    (*root) -> leftchild = NULL;
    (*root) -> rightchild = NULL;
}

BinTree *InsertLeft(BinTree *curr, char x)
{
    BinTree *s, *t;
    if(curr == NULL)
        return NULL;
    t = curr -> leftchild;
    s = new BinTree;
    s -> data = x;
    s -> leftchild = t;
    s -> rightchild = NULL;
    curr -> leftchild = s;
    return curr -> leftchild;
}

BinTree *Insertright(BinTree *curr, char x)
{
    BinTree *s, *t;
    t = curr -> rightchild;
    s = new BinTree;
    s -> data = x;
    s -> rightchild = t;
    curr -> rightchild = s;
    s -> leftchild = NULL;
    return curr -> rightchild;
}

void Destroy(BinTree **root)
{
    if((*root) != NULL && (*root) -> leftchild != NULL)
        Destroy(&(*root) -> leftchild);
    if((*root) != NULL && (*root) -> rightchild != NULL)
        Destroy(&(*root) -> rightchild);
    free(*root);
}

BinTree * DeleLeft(BinTree *curr)
{
    if(curr == NULL || curr -> leftchild == NULL)
        return NULL;
    Destroy (& curr -> leftchild);
    curr -> leftchild = NULL;
    return NULL;
}

BinTree * Deleright(BinTree *curr)
{
    if(curr == NULL || curr -> rightchild == NULL)
        return NULL;
    Destroy(& curr -> rightchild);
    curr -> rightchild = NULL;
    return NULL;
}
#include"treemanual.h"//"treemanual.h"
void visit(char item)
{
    printf("%c", item);
}

void PreOrder(BinTree *t, void visit(char item))
{
    if(t != NULL)
    {
        visit(t -> data);
        PreOrder(t -> leftchild, visit);
        PreOrder(t -> rightchild, visit);
    }
}

void InOrder(BinTree *t, void visit(char item))
{
    if(t != NULL)
    {
        InOrder(t -> leftchild, visit);
        visit(t -> data);
        InOrder(t -> rightchild, visit);    
    }
}

void PostOrder(BinTree *t, void visit(char item))
{
    if(t != NULL)
    {
        PostOrder(t -> leftchild, visit);
        PostOrder(t -> rightchild, visit);
        visit(t -> data);
    }
}
#include<stdio.h>
#include"treetraval.h"
#include"treemanual.h"

void PrintTree(BinTree *t, int n)
{
    int i;
    if(t == NULL)
        return ;
    PrintTree(t -> rightchild, n + 1);
    for(i = 0; i < n; i ++)
    {
        printf(" ");
    }
    if(n >= 0)
    {
        printf("---");
        printf("%c\n", t -> data);
    }
    PrintTree(t -> leftchild, n + 1);
}

void main()
{
    BinTree *root, *p, *pp;
    Initiate(&root);
    p = InsertLeft(root, 'a');
    p = InsertLeft(p, 'b');
    p = InsertLeft(p, 'd');
    p = InsertLeft(p, 'g');
    p = InsertLeft(root -> leftchild, 'c');
    pp = p;
    InsertLeft(p, 'e');
    Insertright(pp, 'f');

    PrintTree(root, 0);

    printf("前序遍历:");
    PreOrder(root -> leftchild, visit);
    Destroy(&root);
}
    


回复列表 (共1个回复)

沙发

出了什么问题?

我来回复

您尚未登录,请登录后再回复。点此登录或注册