zoukankan      html  css  js  c++  java
  • 二叉树遍历(二)

    问题 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;
    }

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

  • 相关阅读:
    《你一定爱读的极简欧洲史》
    PAT 1051. 复数乘法
    PAT 1050. 螺旋矩阵
    PAT 1049. 数列的片段和
    PAT 1048. 数字加密
    PAT 1047. 编程团体赛
    PAT 1046. 划拳
    PAT 1045. 快速排序
    PAT 1044. 火星数字
    PAT 1043. 输出PATest
  • 原文地址:https://www.cnblogs.com/cunyusup/p/7923372.html
Copyright © 2011-2022 走看看