最初版本:利用链表保存二叉树
不足:浪费指针位置。
二叉树结构体
typedef char TElemType;
typedef struct BiTree{
TElemType data;
struct BiTree *Lchild,*Rchild;
}*BiTree,BiTNode;
每一个结点保存数据,左孩子和右孩子的数据。
创建二叉树
利用前序遍历法输入二叉树,没有的结点用#补全
注意传入的参数 是指向指针的指针 这样才能改变指针的值
c++的话也可以用引用代替
void Create_Bitree(BiTree *T){ //前序输入
TElemType data;
scanf("%c",&data);
if(data == '#') T = NULL;
else{
if(!(*T = (BiTree)malloc(sizeof(BiTNode)))) exit(1);
(*T)->data = data;
Create_Bitree(&(*T)->Lchild);
Create_Bitree(&(*T)->Rchild);
}
}
前序遍历法遍历树
void Pre_Order(BiTree T){
if(T!=NULL){
printf("%c",T->data);
Pre_Order(T->Lchild);
Pre_Order(T->Rchild);
}
}
中序遍历法遍历
void In_Order(BiTree T){
if(T!=NULL){
In_Order(T->Lchild);
printf("%c",T->data);
In_Order(T->Rchild);
}
}
后序遍历法遍历
void Post_Order(BiTree T){
if(T!=NULL){
Post_Order(T->Lchild);
Post_Order(T->Rchild);
printf("%c",T->data);
}
}
主函数
int main(){
BiTree T;
printf("请前序遍历输入树\n"<