二叉树遍历之递归算法

#include <stdio.h>
#include <malloc.h>

typedef struct node{
        int data;
        struct node *lchild,*rchild;
}*treetp,tree;

treetp create (treetp t,int c);
void print1(treetp);
void print2(treetp);
void print3(treetp);

int number=0;

int main(void)
{
        treetp t=NULL, r=NULL;
        r=create (t,0);
        printf("/nqianxubianli: ");
        print1 (r);
        printf("/nzhongxubianli: ");
        print2 (r);
        printf("/nhouxubianli: ");
        print3 (r);
        printf("/n");

        return 0;
}

treetp create(treetp t,int c)
{
        treetp p,di;

        do{
                scanf("%d",&c);
                if (t==NULL)
                {
                        t=(treetp)malloc(sizeof(tree));
                        t->lchild=t->rchild=0;
                        t->data=c;
                }
                else
                {
                        p=t;
                        while(p!=NULL)
                        {
                                di=p;
                                if(c < (p->data))
                                        p=p->lchild;
                                else
                                        p=p->rchild;
                        }
                        if(c<(di->data))
                        {
                                treetp NEWdi=(treetp) malloc(sizeof(tree));
                                NEWdi->lchild=NEWdi->rchild=0;
                                NEWdi->data=c;
                                di->lchild=NEWdi;
                        }
                        else
                        {
                                treetp NEWdi=(treetp) malloc(sizeof(tree));
                                NEWdi->lchild=NEWdi->rchild=0;
                                NEWdi->data=c;
                                di->rchild=NEWdi;
                        }
                }
                ++number;
        }while(c!=0);

        printf("yezi de shuliang:%d/n",number);
        return t;
}

void print1(treetp t)
{
        if (t!=NULL)
        {
                printf("%d ",t->data);
                print1(t->lchild);
                print1(t->rchild);
        }
}

void print2(treetp t)
{
        if (t!=NULL)
        {
                print2(t->lchild);
                printf("%d ",t->data);
                print2(t->rchild);
        }
}

void print3(treetp t)
{
        if (t!=NULL)
        {
                print3(t->lchild);
                print3(t->rchild);
                printf("%d ",t->data);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值