根据二叉树的先序遍历结果输出中序遍历

题目描述

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

输入描述:

输入包括1行字符串,长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据,
输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。
每个输出结果占一行。

示例1

输入

abc##de#g#f###

输出

c b e g d f a

#include <iostream>
#include <string>
using namespace std;
 
string str;
int i;
 
struct TreeNode  //树节点
{
    char value; //节点的值
    struct TreeNode *lchild, *rchild;
    TreeNode(char c): value(c), lchild(NULL), rchild(NULL){} //初始化
};
TreeNode* creatTree() //创建树
{
    char c = str[i++];
    if (c == '#') return NULL;
    TreeNode *root = new TreeNode(c);
    root->lchild = creatTree();
    root->rchild = creatTree();
    return root;
}
void inorder(TreeNode* root) //中序遍历
{
    if (!root) return;
    inorder(root->lchild);
    cout << root->value <<" ";
    inorder(root->rchild);
}
void deleteTree(TreeNode* root) //删除构建的树防止内存泄露
{
    if (root->lchild != NULL) 
    {
        deleteTree(root->lchild);
        root->lchild = NULL;
    }
    if (root->rchild != NULL) 
    {
        deleteTree(root->rchild);
        root->rchild = NULL;
    }
    delete(root);
}
int main()
{
    while(cin >> str)
    {
        i = 0;
        TreeNode *root = creatTree();
        inorder(root);
        cout << endl;
        deleteTree(root);
    }
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据结构第12讲 二叉树的层次遍历 二叉树的遍历一般有先序遍历、中序遍历和后序遍历,这三种遍历比较简单。今天我们讲...
    rainchxy阅读 3,688评论 0 1
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 6,067评论 0 13
  • 树的定义与基本术语   树型结构是一类重要的非线性数据结构,其中以树和二叉树最为常用,是以分支关系定义的层次结构。...
    java技术分享师阅读 1,153评论 0 1
  • 夜深了 我的屋子也冰冷了 睡眠都被风声吹凉 仿佛野猫抓了我的窗户 嗤哧作响 梦里的那只大蝙蝠 啄开我的静脉 汩汩喝...
    凡文寓义阅读 63评论 0 3
  • 梁山全盛时有108人,正合天罡地煞之数,以宋江为首,攻陷州府,欣欣向荣。梁山前后一共有三位头领,第一个是白衣秀士王...
    a1bd7bf706ce阅读 635评论 0 0