• [二叉树建树] 根据前序遍历构造二叉树


    题目描述

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

    输入

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

    输出

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

    样例输入

    a#b#cdef#####a##

    样例输出

    a b f e d c
    注:每个字母后面跟着一个空格。
     
    分析:与二叉树复原进行对比,是两种不同的构建二叉树的方法。
     
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    using namespace std;
    
    string input;
    
    struct node
    {
        char data;
        node * lchild,*rchild;
    };
    
    void preOrder(node * & root,int & index)
    {
        if(index>=input.length())
        {
            return ;
        }
        if(input[index]=='#')
        {
            root=NULL;
            index++;
        }
        else
        {
            root=new node;
            root->data=input[index];
            index++;
            preOrder(root->lchild,index);
            preOrder(root->rchild,index);
            
        }
    }
    
    void inOrder(node * root)
    {
        if(root==NULL)
        {
            return ;
        }
        inOrder(root->lchild);
        cout<<root->data<<" ";
        inOrder(root->rchild);
    }
    
    int main()
    {
        while(cin>>input)
        {
            node * root=NULL;
            int index=0;
            preOrder(root,index);
            inOrder(root);
            cout<<endl;
        }
    }
     
     
     
     
  • 相关阅读:
    2019-11-4:渗透测试,bypass学习,笔记
    2019-11-3:渗透测试,基础学习,bypass类型笔记
    Linux常用命令集合
    HBase(0.96以上版本)过滤器Filter详解及实例代码
    Hadoop安全模式
    Linux学习笔记--一些错误的记录
    GUG记录
    为什么 1000 == 1000会返回false,100 == 100会返回true
    关于解决mysql数据库乱码的问题
    《MVC实现用户权限》
  • 原文地址:https://www.cnblogs.com/xiongmao-cpp/p/6430108.html
Copyright © 2020-2023  润新知