剑指Offer:重建二叉树

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
struct TreeNode{
  
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x):val(x),left(NULL),right(NULL){}
  
};
  
  
class Solution{
public:
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
  
        TreeNode* root=reConstructBinaryTreeOne(pre,0,pre.size()-1,vin,0,vin.size()-1);
        return root;
    }
  
    //前序遍历{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}
private:
    TreeNode* reConstructBinaryTreeOne(vector<int> pre,int startPre,int endPre,vector<int> vin,int startIn,int endIn) {
  
        if(startPre>endPre||startIn>endIn)
            return nullptr;
        TreeNode* root=new TreeNode(pre[startPre]);
  
        for(int i=startIn;i<=endIn;i++)
            if(vin[i]==pre[startPre]){
                root->left=reConstructBinaryTreeOne(pre,startPre+1,startPre+i-startIn,vin,startIn,i-1);
                root->right=reConstructBinaryTreeOne(pre,i-startIn+startPre+1,endPre,vin,i+1,endIn);
                break;
            }
  
            return root;
    }
};

 

恭喜你通过本题

运行时间:8ms

占用内存:700

 

posted @   言午丶  阅读(116)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示