zoukankan      html  css  js  c++  java
  • 剑指offer 给定二叉树前序,中序遍历序列,求二叉树和后续序列

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    
    
    struct TreeNode {
        int val;
        TreeNode* left;
        TreeNode* right;
        TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };
    
    class Solution {
    public:
        int find_index(const vector<int>& vec, const int target){
            for(int i = 0; i < vec.size(); i++){
                if(vec[i] == target){
                    return i;
                }
            }
            return -1;
        }
    
        TreeNode* construct(vector<int>& pre, int ps, int pe, vector<int>& vin, int vs, int ve){
            if(ps > pe) return nullptr;
            int value = pre[ps];
            int index = find_index(vin, value);
            auto node = new TreeNode(value);
            node->left = construct(pre, ps+1, ps + index - vs, vin, vs, index-1);
            node->right = construct(pre, ps + index - vs + 1, pe, vin, index + 1, ve);
            return node;
        }
    
        TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
            if(pre.empty() || vin.empty() || pre.size() != vin.size()){
                return nullptr;
            }
            return construct(pre, 0, pre.size()-1, vin, 0, vin.size()-1);
        }
    };
    
    void post_order(TreeNode* root){
        if(root == nullptr){
            return;
        }
        post_order(root->left);
        post_order(root->right);
        cout << root->val << ", ";
    }
    
    
    int main() {
        Solution s;
        vector<int> pre = {1,2,4,7,3,5,6,8};
        vector<int> vin = {4,7,2,1,5,3,8,6};
        auto t = s.reConstructBinaryTree(pre, vin);
        post_order(t);
    
        return 0;
    }
    
  • 相关阅读:
    12/21
    和寶寶在一起3/10
    11/23
    c#windows应用程序窗体间传值
    用OWC做统计图
    javascript 创建字典
    .NetCom双向数据交换的实现(RecordSet与.Net DataSet的转化)
    JScript 方法 indexOf 方法
    详尽解析window.event对象
    Window.Open详解
  • 原文地址:https://www.cnblogs.com/theodoric008/p/9513469.html
Copyright © 2011-2022 走看看