主题:树的遍历出问题了,大家帮我看看
#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);
}
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);
}