二叉树的指针和地址看的真难受,各种问题。
*&
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include "string.h"
#define num 100
using namespace std;
typedef char datatype;
typedef struct BinTNode{
BinTNode *lchild;
BinTNode *rchild;
char data;
}BinTNode,*BinTree;
//按层输入 ABC@D@F@@E#
void CreateBinTree(BinTree &bt)
{
BinTNode *Q[num];
BinTNode *s;
int parent,child;
char ch;
ch=getchar();
bt=NULL;
parent=1;
child=0;
while(ch!='#')
{
s=NULL;
child++;
if(ch!='@')
{
s= new BinTNode();
s->data=ch;
s->lchild=s->rchild=NULL;
}
Q[child]=s;
if(child==1)
bt=s;
else if(s&&child>0)
{
parent=child/2;
if(child%2==0)
Q[parent]->lchild=s;
else
Q[parent]->rchild=s;
}
ch=getchar();
}
}
//先序输入 AB#DE###C#F##
void createBiTree(BinTree &T)
{
char c;
cin >> c;
if('#' == c)
T = NULL;
else
{
T = new BinTNode;
T->data=c;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
}
void PreorderTraversal(BinTree T) {
if(T==NULL) return;
cout<<T->data<<" ";
PreorderTraversal(T->lchild);
PreorderTraversal(T->rchild);
}
void InOrderTraveres(BinTree T) {
if(T == NULL) return;
InOrderTraveres(T -> lchild);
cout<<T->data<<" ";
InOrderTraveres(T -> rchild);
}
void PostTraversing(BinTree T) {
//cout<<" dsa"<<endl;
if(T == NULL) return;
PostTraversing(T -> lchild );
PostTraversing(T -> rchild);
cout<<T->data<<" ";
}
int main ()
{
//freopen("66.txt","r",stdin);
BinTree T,S;
cout<<"按层输入:"<<endl;
CreateBinTree(T);
cout<<"先序输出:";
PreorderTraversal(T);
cout<<endl<<"中序输出:";
InOrderTraveres(T);
cout<<endl<<"后序输出:";
PostTraversing(T);
cout<<endl<<endl;
cout<<"先序输入:"<<endl;
createBiTree(S);
cout<<"先序输出:";
PreorderTraversal(S);
cout<<endl<<"中序输出:";
InOrderTraveres(S);
cout<<endl<<"后序输出:";
PostTraversing(S);
return 0;
}