[剑指Offer] 4.重建二叉树

来源:互联网 发布:js命名规范 编辑:程序博客网 时间:2024/05/20 00:14
题目描述

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

【思路】递归,先找到根结点,再找到左右子树的前序与中序序列进行递归

 1 /** 2  * Definition for binary tree 3  * struct TreeNode { 4  *     int val; 5  *     TreeNode *left; 6  *     TreeNode *right; 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8  * }; 9  */10 class Solution {11 public:12     TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {13         14         if(pre.size() == 0)15             return NULL;16         TreeNode* Root = new TreeNode(pre[0]);17         18         vector<int> pre1,pre2;19         vector<int> in1,in2;20         int root = pre[0];21         int root_id = 0;22         23         //找到根结点在中序序列中位置root_id24         for(int i = 0;i < in.size();i ++){25             if(root == in[i]){26                 root_id = i;27             }28         }29         30         for(int i = 0;i < root_id;i ++)31             in1.push_back(in[i]);32         for(int i = root_id + 1;i < in.size();i ++)33             in2.push_back(in[i]);34         35         for(int i = 1;i < in1.size() + 1;i ++)36             pre1.push_back(pre[i]);37         for(int i = in1.size() + 1;i < pre.size();i ++)38             pre2.push_back(pre[i]);39         40         Root->left = reConstructBinaryTree(pre1,in1);41         Root->right = reConstructBinaryTree(pre2,in2);42         43         return Root;44         45     }46 };

 

原创粉丝点击