剑指Offer编程练习__重建二叉树

来源:互联网 发布:java json双引号转义 编辑:程序博客网 时间:2024/05/22 04:57

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

/** * 题目描述 * 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。 * 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如 * 输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1, * 5,3,8,6},则重建二叉树并返回。 */#include <iostream>#include <vector>using namespace std;// Definition for binary treestruct 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) {    if (pre.empty())    return nullptr;    TreeNode *root = new TreeNode(pre[0]);    for (int i = 0, len = vin.size(); i < len; i++) {    if (pre[0] == vin[i]) {    root->left = reConstructBinaryTree(    vector<int>(pre.begin() + 1, pre.begin() + 1 + i),     vector<int>(vin.begin(), vin.begin() + i));    root->right = reConstructBinaryTree(    vector<int>(pre.begin() + 1 + i, pre.end()),     vector<int>(vin.begin() + i + 1, vin.end()));    break;    }    }    return root;    }};int main() {TreeNode *root = Solution().reConstructBinaryTree(vector<int>{1,2,4,7,3,5,6,8}, vector<int>{4,7,2,1,5,3,8,6});return 0;}


原创粉丝点击