zoukankan      html  css  js  c++  java
  • HihoCoder第十周——已知前序中序求后序

    思路

    我们定义post_order(str1, str2)为一棵前序遍历的结果为str1,中序遍历的结果为str2的二叉树的后序遍历的结果。
    如果要求解post-order(str1, str2)的话,首先不难发现,根据‘前序遍历’str1=‘根节点’+‘左子树的前序遍历’+‘右子树的前序遍历’,我可以知道这棵二叉树的根节点root便是str1的第一个字符。
    在知道了‘根节点’root之后,便可以利用‘中序遍历’str2=‘左子树的中序遍历’+‘根节点’+‘右子树的中序遍历’,求解出‘左子树的中序遍历’str2L和‘右子树的中序遍历’str2R。
    由于一棵子树的前序遍历和中序遍历的长度相同,那么仍然是根据‘前序遍历’str1=‘根节点’+‘左子树的前序遍历’+‘右子树的前序遍历’,我可以知道从str1的第2个字符开始的str2L.length()个字符便是‘左子树的前序遍历’str1L,而这之后的部分便是‘右子树的前序遍历’str1R。

    实现

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    void post(string pre,string mid){
        if(pre.length() <= 1){
            cout << pre;return;
        }
        size_t loc =  mid.find(pre[0]);
        post(pre.substr(1,loc),mid.substr(0,loc));
        post(pre.substr(loc+1),mid.substr(loc+1));
        cout << pre[0];
    }
    
    int main(){
        string pre,mid;
        cin >> pre >> mid;
        post(pre,mid);
        return 0;
    }
  • 相关阅读:
    Alpha 冲刺 (10/10)
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    Alpha 冲刺 (5/10)
    18软工实践-团队现场编程实战(抽奖系统)
    Alpha 冲刺 (4/10)
    BETA(4)
    BETA(3)
  • 原文地址:https://www.cnblogs.com/nickqiao/p/7583330.html
Copyright © 2011-2022 走看看