二叉树的建立与遍历

作者在 2010-05-12 21:33:37 发布以下内容
#include<stdio.h>
#include<stdlib.h>

int leafcount=0;

typedef struct BiTNode{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

int CreateBiTree(BiTree *T)/*根据先序序列建立二叉树的二叉链表*/
{ char ch;
    scanf("%c",&ch);
        if(ch=='-')
   {
   *T=NULL;
   }
        else{
            if(!(*T=(BiTree)malloc(sizeof(BiTNode)))) return 0;
            (*T)->data=ch;
            CreateBiTree(&((*T)->lchild));
            CreateBiTree(&((*T)->rchild));
        }
   return 1;
}

int preOrder(BiTree T)/*先序遍历的递归算法*/

{
    if(T){
        printf("%c ",T->data);
   if (!T->lchild&&!T->rchild) leafcount+=1;
        preOrder(T->lchild);
        preOrder(T->rchild);
    }
    return 1;
}

int inOrder(BiTree T)/*中序遍历的递归算法*/
{
    if(T){
        inOrder(T->lchild);
        printf("%c ",T->data);
        inOrder(T->rchild);
    }
    return 1;
}

int oldOrder(BiTree T)/*后序遍历的递归算法*/
{
    if(T){
        oldOrder(T->lchild);
        oldOrder(T->rchild);
        printf("%c ",T->data);
    }
    return 1;
}


void main()

{   BiTree T;
    leafcount=0;
    printf("please enter abc--de-g--f---\n");

    CreateBiTree(&T);

    printf("xian xu bian li:");
    preOrder(T);

    printf("\nzhong xu bian li:");
    inOrder(T);

    printf("\nhou xu bian li:");
    oldOrder(T);

    printf("\nye zi jie dian:%d \n",leafcount);
    system("pause");

}
默认分类 | 阅读 1069 次
文章评论,共0条
游客请输入验证码
文章分类
最新评论