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

    【题目描述】

    树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。

    假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。

    【输入】

    两行,每行是由字母组成的字符串(一行的每个字符都是唯一的),分别表示二叉树的中序遍历和按层遍历的序列。

    【输出】

    一行,表示二叉树的先序序列。

    【输入样例】

    DBEAC
    ABCDE

    【输出样例】

    ABDEC

    #include <bits/stdc++.h>
    using namespace std;
    
    struct Node {
        char value;
        Node *left, *right;
    };
    
    string GetLevel(const string &level, const string &pre)
    {
        string new_level;
        for (int i = 0; i < level.size(); i++) {
            if (pre.find(level[i]) != string::npos) {
                new_level.push_back(level[i]);
            }
        }
        return new_level;
    }
    
    Node *CreateTree(const string &pre, const string &level)
    {
        if (pre.size() <= 0) {
            return NULL;
        } else {
            // cout << pre << "," << level << endl;
            Node *root = new Node;
            root->value = level[0];
            int pos = pre.find(level[0]);
            string pre1 = pre.substr(0, pos);
            string level1 = GetLevel(level, pre1);
            root->left = CreateTree(pre1, level1);
            string pre2 = pre.substr(pos + 1);
            string level2 = GetLevel(level, pre2);
            root->right = CreateTree(pre2, level2);
            return root;
        }
    }
    
    string PreOrder(Node *root)
    {
        string s;
        if (root != NULL) {
            s.push_back(root->value);
            s += PreOrder(root->left);
            s += PreOrder(root->right);
        }
        return s;
    }
    
    string InOrder(Node *root)
    {
        string s;
        if (root != NULL) {
            s += InOrder(root->left);
            s.push_back(root->value);
            s += InOrder(root->right);
        }
        return s;
    }
    
    string PostOrder(Node *root)
    {
        string s;
        if (root != NULL) {
            s += PostOrder(root->left);
            s += PostOrder(root->right);
            s.push_back(root->value);
        }
        return s;
    }
    
    int main()
    {
        // freopen("1.txt", "r", stdin);
        string pre = "DBEAC", level = "ABCDE";
        cin >> pre >> level;
        Node *root = CreateTree(pre, level);
        cout << PreOrder(root) << endl;
        // cout << InOrder(root) << endl;
        // cout << PostOrder(root) << endl;
        return 0;
    }
  • 相关阅读:
    Numpy库
    使用Python的pandas-datareader包下载雅虎财经股价数据
    python引用库异常总结
    桌面常用快捷键
    第四章 数据的概括性度量
    第三章 数据的图表展示
    python连接MySql数据库
    如何利用scrapy新建爬虫项目
    幼儿教育
    PyMySQL和MySQLdb的区别
  • 原文地址:https://www.cnblogs.com/gaojs/p/14942349.html
Copyright © 2011-2022 走看看