标题:简易二叉树建立与遍历
只看楼主
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
结帖率:100%
已结贴  问题点数:20 回复次数:3 
简易二叉树建立与遍历
输入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
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:20 
这个是层次遍历创建二叉树么,看上去挺实用的,数据结构课本上面也有用数组来创建二叉树的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-21 22:31
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
回复 2楼 九转星河
按层从上至下从左至右建立二叉树。所有元素像个队列,队头为父母,队尾为孩子。依次添加元素,然后就是遍历。
2018-04-21 22:38
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 3楼 ehszt
记得我们数据结构老师代码用数组也是这样建立二叉树的
其实还有一种常用的就是先序建立二叉树~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-21 22:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486262-1-1.html




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

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