剑指offer——05重建二叉树

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
 
已知中序遍历和前序遍历,可以得到唯一的二叉树
 
 1 class Solution {
 2 public:
 3     TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
 4         if (pre.size() == 0 || vin.size() == 0 || pre.size() != vin.size())
 5             return nullptr;
 6         return createTree(pre, vin, 0, pre.size() - 1, 0, pre.size() - 1);
 7     }
 8     TreeNode *createTree(vector<int> pre, vector<int> vin, int inL, int inR, int preL, int preR)
 9     {
10         if (inL > inR)return nullptr;
11         TreeNode *root = new TreeNode(pre[preL]);
12         int k = inL;
13         while (k <= inR && vin[k] != pre[preL])k++;
14         int m = k - inL;
15         root->left = createTree(pre, vin, inL, k - 1, preL + 1, preL + m);
16         root->right = createTree(pre, vin, k + 1, inR, preL + m + 1, preR);
17         return root;
18     }
19 };

猜你喜欢

转载自www.cnblogs.com/zzw1024/p/11651182.html