二叉树的三种创建方法(指针、引用、和指针函数)
采用先序遍历的方法创建一棵二叉树,大写字母(A-Z)表示结点不为空且字母即为结点数据域内容;#表示空节点。
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef char ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *LChild,*RChild;
}BiTNode,*BiTree;
void CreateBiTree1(BiTree *bt)
{
char ch;
scanf("%c",&ch);
if(ch=='#') *bt=NULL;
else
{
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt)->data=ch;
CreateBiTree1(&((*bt)->LChild));
CreateBiTree1(&((*bt)->RChild));
}
}
void CreateBiTree2(BiTree &bt)
{
char ch;
scanf("%c",&ch);
if(ch=='#') bt=NULL;
else
{
bt=(BiTree)malloc(sizeof(BiTNode));
bt->data=ch;
CreateBiTree2(bt->LChild);
CreateBiTree2(bt->RChild);
}
}
BiTree CreateBiTree3()
{
BiTree bt;
char ch;
scanf("%c",&ch);
if(ch=='#') bt=NULL;
else
{
bt=(BiTree)malloc(sizeof(BiTNode));
bt->data=ch;
bt->LChild=CreateBiTree3();
bt->RChild=CreateBiTree3();
}
return bt;
}
void PreOrder(BiTree T){
if(T!=NULL){
printf("%c",T->data);
PreOrder(T->LChild);
PreOrder(T->RChild);
}
}
void DestroyBiTree(BiTree &b)
{ if (b!=NULL)
{ DestroyBiTree(b->LChild);
DestroyBiTree(b->RChild);
free(b);
}
}
int main(){
BiTree T1,T2,T3;
CreateBiTree1(&T1);
PreOrder(T1);
printf("\n");
DestroyBiTree(T1);
return 0;
}
建立成功后输出先序遍历序列: