• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
村雨sup
自己选的路,跪着也要走完 XD
博客园    首页    新随笔    联系   管理    订阅  订阅
二叉树遍历(二)

问题 A: 数据结构作业04 -- 二叉树的输入

时间限制: 1 Sec  内存限制: 128 MB
提交: 1904  解决: 593
[提交][状态][讨论版]

题目描述

用二叉树的带虚结点表示的前序遍历序可以唯一的确定一棵二叉树。

输入

每行是一棵二叉树的带虚结点(#)表示的前序遍历序串,长度不超过2000。每个结点为一个小写字母或一个数字。

输出

对每行输入,输出对应二叉树的中序遍历序(不含虚结点)、后序遍历序(不含虚结点)和层次遍历序(不含虚结点)。 每棵二叉树的输出占一行,中序遍历序、后序遍历序和层次遍历序之间用一个空格隔开。

样例输入

ab##c##
#
ab###

样例输出

bac bca abc
  
ba ba ab

提示

 

Sample Input的第二行表示一棵空树,因此输出时输出两个空格。


#include "bits/stdc++.h"
using namespace std;
struct Binode
{
    char data;
    Binode *lchild,*rchild;
};

typedef Binode *Bitree;
Bitree T1;

int InitBiTree(Bitree &T)
{
    T = NULL;
    return 0;
}


// 用带虚结点的前序遍历串str(每个字符对应一个结点)构造二叉树T,并返回剩余字符串
char *CreateBiTree(Bitree &T, char *str)
{
// 约定#表示空结点
    if (*str == '#')
    {
        T = NULL;
        return str + 1;
    }

// 创建结点
    T = new Binode;
    T->data = *str;

// 继续输入并构造左子树和右子树
    str = CreateBiTree(T->lchild, str + 1);
    str = CreateBiTree(T->rchild, str);

// 返回剩余的字符串
    return str;
}
int InTraverse(Bitree T)
{
    if (T == NULL) return 0;
    InTraverse(T->lchild);
    cout << T->data ;
    InTraverse(T->rchild);
    return 0;
}

int SucTraverse(Bitree T)
{
    if (T == NULL) return 0;
    SucTraverse(T->lchild);
    SucTraverse(T->rchild);
    cout << T->data ;
    return 0;
}
queue<Bitree>a;
int cengci(Bitree T)
{
    if(T == NULL) return 0;
    a.push(T);
    while(!a.empty())
    {
        cout << a.front()->data;

        if(a.front()->lchild != NULL)
            a.push(a.front()->lchild);
        if(a.front()->rchild != NULL)
            a.push(a.front()->rchild);
        a.pop();

    }
    return 0;
}

int main()
{
    char s[3000];
    char *str1;
    while(cin >> s)
    {
        str1 = s;
        InitBiTree(T1);
        CreateBiTree(T1,str1);
        InTraverse(T1);
        cout << " ";
        SucTraverse(T1);
        cout << " ";
        cengci(T1);
        cout << endl;
    }

    return 0;
}

哈哈哈哈,层次遍历被我想出来啦啦啦阿拉啦啦啦啦啦啦啦啦

posted on 2017-11-29 23:41  村雨sup  阅读(568)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3