/*
*输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
* 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
*
* 前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
* */
#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:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
return build(preorder, inorder, 0, 0, inorder.size() - 1);
}
TreeNode* build(vector<int>& preorder, vector<int>& inorder, int root, int start, int end){// 中序的start和end
if(start > end) return NULL;//递归的出口
TreeNode *tree = new TreeNode(preorder[root]);
int i = start;
while(i < end && preorder[root] != inorder[i]) i++;
tree->left = build(preorder, inorder, root + 1, start, i - 1);
tree->right = build(preorder, inorder, root + 1 + i - start, i + 1, end);
return tree;
}
};
int main() {
std::cout << "Hello, World!" << std::endl;
vector<int> preorder={3,9,20,15,7};
vector<int> inorder={9,3,15,20,7};
Solution *p=new Solution();
p->buildTree(preorder,inorder);
return 0;
}
剑指offer--面试题07. 重建二叉树
最新推荐文章于 2020-08-04 16:34:30 发布