| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1713 人关注过本帖, 1 人收藏
标题:简易二叉树建立与遍历
取消只看楼主 加入收藏
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:1 
简易二叉树建立与遍历
输入ABCDE@F#
输出结果为:
前序遍历结果:ABDECF
中序遍历结果:DBEACF
后序遍历结果:DEBFCA
#include<stdio.h>
#include<stdlib.h>
typedef struct BitNode
{
    char data;
    struct BitNode* lchild;
    struct BitNode* rchild;
}BitNode,*Bintree;

Bintree creatbitree();   //创建二叉树
void preordertraverse(BitNode* t);      //前序遍历二叉树
void inorder(BitNode *t);
void postorder(BitNode *t);
int main()
{
    Bintree bt;
    bt=creatbitree();
    printf("前序遍历结果:",bt->data);
    preordertraverse(bt);
    printf("\n中序遍历结果:");
    inorder(bt);
    printf("\n后序遍历结果:");
    postorder(bt);
}

Bintree creatbitree()
{
    BitNode *Q[10],*s,*bt;
    int front ,rear;char ch;
    front=1;rear=0;   
    ch=getchar();
    bt=NULL;
    while(ch!='#')
    {
        s=NULL;
        if(ch!='@')
        {
            s=(BitNode *)malloc(sizeof(BitNode));
            s->data=ch;s->lchild=s->rchild=NULL;
        }
        rear++;
        Q[rear]=s;
        if(rear==1)  //当队尾为1时s为根接点,赋给bt
        {
            bt=s;
            //printf("%c",bt->data);
        }
        
        else{
            if(s!=NULL&&Q[front]!=NULL)
            {
                if(rear%2==0)   //队尾为偶数时新结点为左孩子
                Q[front]->lchild=s;
                else
                Q[front]->rchild=s;  //否则为右孩子
                if(rear%2==1)
                front++;
            }
        }
        while((ch=getchar())=='\n');
    }
    return bt;
}

void preordertraverse(Bintree bt)
{

    if(bt!=NULL)
    {
        printf("%c",bt->data);
        preordertraverse(bt->lchild);
        preordertraverse(bt->rchild);
    }
}

void inorder(BitNode *bt)
{
    if(bt!=NULL)
    {
        inorder(bt->lchild);
        printf("%c",bt->data);
        inorder(bt->rchild);
    }
}
void postorder(BitNode *bt)
{
    if(bt!=NULL)
    {
        postorder(bt->lchild);
        postorder(bt->rchild);
        printf("%c",bt->data);
    }
}

[此贴子已经被作者于2018-4-25 11:13编辑过]

收到的鲜花
  • 九转星河2018-04-21 22:45 送鲜花  1朵   附言:可以可以~~~
搜索更多相关主题的帖子: 遍历 结果 data printf NULL 
2018-04-21 21:23
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 2楼 九转星河
按层从上至下从左至右建立二叉树。所有元素像个队列,队头为父母,队尾为孩子。依次添加元素,然后就是遍历。
2018-04-21 22:38
快速回复:简易二叉树建立与遍历
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018567 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved