数据结构实验之二叉树二:遍历二叉树

Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description

已知二叉树的一个按先序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
每组输入数据对应输出2行:
第1行输出中序遍历序列;
第2行输出后序遍历序列。

Sample Input

abc,de,g,f,

Sample Output

cbegdfa
cgefdba

这个题就是基础的建立二叉树,遍历二叉树的方式。
二叉树里要时刻记住递归的思想。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char a[111];
int l1;
struct tree
{
    char data;
    tree *lboy, *rgirl;
};
struct tree *creat()
{
    tree *root;                          //建立二叉树
    char c;
    c = a[l1++];
    if(c == ',') return NULL;
    else
    {
        root = new tree;
        root->data = c;
        root->lboy = creat();
        root->rgirl = creat();
    }
    return root;
}

void preprintf(tree *root)       //先序遍历,这一题没用到。  先序就是根左右。
{
    if(root)
    {
        printf("%c",root->data);
        preprintf(root->lboy);
        preprintf(root->rgirl);
    }
}

void midprintf(tree *root)        //中序遍历,左根右。
{
    if(root)
    {
        midprintf(root->lboy);
        printf("%c",root->data);
        midprintf(root->rgirl);
    }
}

void backprintf(tree *root)          //后序遍历,根左右。
{
    if(root)
    {
        backprintf(root->lboy);
        backprintf(root->rgirl);
        printf("%c",root->data);
    }
}

int main()
{
    tree *root;
    while(~scanf("%s",a))
    {
        l1 = 0;
        root = creat();
        midprintf(root);
        printf("\n");
        backprintf(root);
        printf("\n");
    }
    return 0;
}

遍历时:
先序遍历:左右根;
中序遍历:根左右;
后序遍历:左右根;

递归时就按顺序敲就行:

void preprintf(tree *root)     
{
    if(root)
    {
        printf("%c",root->data);   //根
        preprintf(root->lboy);     //左
        preprintf(root->rgirl);    //右
    }
}

void midprintf(tree *root)     
{
    if(root)
    {
        midprintf(root->lboy);        左
        printf("%c",root->data);      根
        midprintf(root->rgirl);       右
    }
}

void backprintf(tree *root)    
{
    if(root)
    {
        backprintf(root->lboy);      左
        backprintf(root->rgirl);     右
        printf("%c",root->data);     根
    }
}

建立时用到了指针函数,还有个叫函数指针的东西。
指针函数我自己还没搞明白,说下函数指针吧。

函数指针就是用指针调用函数。
我写了个简单的例子:

#include<stdio.h>
int max(int a, int b)
{
    if(a>b) return a;
    else return b;
}
int main()
{
    int x = 11, y = 22;
    int (*mm)(int,int);
    mm = max;
    int c = (*mm)(x,y);
    printf("%d",c);
    return 0;
}
               这个输出的结果就是22;这里指针指向的是max函数,我理解就是通
               过指针调用这个函数,函数是不变的,指针能改变,如果还有个min
               函数的话,我如果再让mm = min;这时候指针调用的又是min函数了。
               所以,我目前为止也不知道为什么不直接调用,还得用个指针调用,等
               我问问老师再更新一波。

         又见面了鸭,我已经请教过老师了,4个字:效率高!!!!!!!
                                  向前冲鸭!!!!!!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值