以先序字符串方式建立二叉树

32 篇文章 1 订阅
6 篇文章 0 订阅

原题

题目描述

输入一个二叉树的先序串,输出其后序遍历结果。如果结点的子树为空,先序串的对应位置为空格符。

输入

第1行:先序串(结点数≤26,以单个大写字母表示)

输出

第1行:后序序列

样例输入

AB#C##D##

样例输出

CBDA

注:空格用#表示

分析

这道题不能像上一道题那么蹊跷来做了。
首先建树,详情见题中注释。

char a[105];
int len,i;//i逐渐增加
void build(int s){
    if(i==len) return;//已经建完树了
    char c=a[i];//当前的字符
    i++;
    if(!tree[s].l) tree[s].l=c;//如果树的左边是空的,就给左边赋值
    else tree[s].r=c;//反之
    if(c!=' ') build(c);
    if(c!=' ') build(c);//再来递归两下
}

因为本题的重点就是建树,遍历什么的前面都讲过了,建完树以后就开心的遍历啦~~~

就为了写出这个建树程序,我脑花都散了,好了,源程序如下
╭~~~╮
(o@.@o)

源代码

#include<cstdio>
#include<cstring>
struct node{int l,r;};
node tree[105];
char a[105];
int len,i;
void build(int s){
    if(i==len) return;
    char c=a[i];
    i++;
    if(!tree[s].l) tree[s].l=c;
    else tree[s].r=c;
    if(c!=' ') build(c);
    if(c!=' ') build(c);
}
void last(int g){
    if(g){
        last(tree[g].l);
        last(tree[g].r);
        if(g!=' ') printf("%c",g);
    }
}
int main()
{
    gets(a);
    len=strlen(a);
    build(0);
    last(a[0]);
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值