C语言实现二叉树并且实现二叉树的遍历
首先实现一棵二叉树,指定添加节点的位置来添加节点,(指定插入节点的位置是通过一个保存地址的数组来加以实现的,节点的位置通过编号来进行实现,从上到下,从左到右,按一个完全二叉树来进行编号),例如在程序中我们建立下面的一棵树:
源程序代码如下:
#include <stdlib.h>
#include <stdio.h>
#define N 100
typedef struct node
{
char data;
struct node *lchild,*rchild;
}Bitnode,*Bitree;
Bitree createbt(){
Bitree p;
Bitree s[N];
int i,j;
char ch;
printf("i and c=");
scanf("%d%c",&i,&ch);
while(i!=0&&ch!='#'){
p=(Bitree)malloc(sizeof(Bitnode));
p->data=ch;
p->lchild=p->rchild=NULL;
s[i]=p;
if(i!=1){
j=i/2;
if(i%2==0)
s[j]->lchild=p;
else
s[j]->rchild=p;
}
printf("i and ch=");
scanf("%d%c",&i,&ch);
}
return s[1];
}
void preorder(Bitree t){
if(t){
printf("%c\t",t->data);
preorder(t->lchild);
preorder(t->rchild);
}
}
void inorder(Bitree t){
if(t){
inorder(t->lchild);
printf("%c\t",t->data);
inorder(t->rchild);
}
}
void laorder(Bitree t){
if(t){
laorder(t->lchild);
laorder(t->rchild);
printf("%c\t",t->data);
}
}
int main(){
Bitree bt;
bt=createbt();
printf("preorder:\n");
preorder(bt);
printf("\ninorder:\n");
inorder(bt);
printf("\nlaorder:\n");
laorder(bt);
return 0;
}
转载于:https://my.oschina.net/818826/blog/630897