二叉树创建、三种遍历、叶子节点数

来源:互联网 发布:linux开机启动应用脚本 编辑:程序博客网 时间:2024/04/29 09:57

做了二叉树的作业,感觉就是:觉得麻烦就用递归……还有就是打#也是也要技术的……
一下程序在VC6.0环境中顺利运行

#include <stdio.h>#include<stdlib.h>typedef struct BiTNode{    char  data;    struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;BiTree Create(BiTree T){    char ch;    ch=getchar();    if (ch=='#') {        T=NULL;    }    else    {        if(!(T=(BiTree)malloc(sizeof(BiTNode))))            printf("ERROR!\n");        T->data=ch;       T->lchild= Create(T->lchild);       T->rchild= Create(T->rchild);    }    return T;}void InOrderTraverseX(BiTree T)//先序遍历{    if (T) {        if (T->data!='#') {            printf("%c",T->data);        }        InOrderTraverseX(T->lchild);        InOrderTraverseX(T->rchild);    }}void InOrderTraverseZ(BiTree T)//中序遍历{    if (T) {        InOrderTraverseZ(T->lchild);        if (T->data!='#') {            printf("%c",T->data);        }        InOrderTraverseZ(T->rchild);    }}void InOrderTraverseH(BiTree T)//后序遍历{    if (T) {        InOrderTraverseH(T->lchild);         InOrderTraverseH(T->rchild);        if (T->data!='#') {            printf("%c",T->data);        }    }}int sumleaf(BiTree T)//叶子节点个数{    int sum=0,m=0,n=0;    if(T)    {        if(!T->lchild && !T->rchild)            sum++;        m=sumleaf(T->lchild);        sum+=m;        n=sumleaf(T->rchild);        sum+=n;    }    return sum;}int main() {    BiTree l;    int sum=0;    l=Create(l);    InOrderTraverseX(l);    printf("\n");    InOrderTraverseZ(l);    printf("\n");    InOrderTraverseH(l);    printf("\n");    sum=sumleaf(l);    printf("sum=%d\n",sum);    return 0;}

拜了个拜~

0 0
原创粉丝点击