C语言实现二叉树并且实现二叉树的遍历

首先实现一棵二叉树,指定添加节点的位置来添加节点,(指定插入节点的位置是通过一个保存地址的数组来加以实现的,节点的位置通过编号来进行实现,从上到下,从左到右,按一个完全二叉树来进行编号),例如在程序中我们建立下面的一棵树:

C语言实现二叉树并且实现二叉树的遍历

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