重建二叉树
2017-03-02 21:48
176 查看
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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},则重建二叉树并返回。
思路
核心思路是找出根节点,然后把左子树和右子树看成整体,继续寻找根节点,直到结束。运用迭代的方法实现。
/** * Definition for binary tree * 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) { vect 4000 or<int> pre_left, pre_right, vin_left, vin_right; int vin_length = vin.size(); int location = 0; if(vin.size() == 0) return NULL; TreeNode* res = new TreeNode(pre[0]); for(int i = 0; i < vin_length; i++){ if(vin[i] == pre[0]) location = i; } for(int i = 0; i < location; i++){ pre_left.push_back(pre[i+1]); vin_left.push_back(vin[i]); } for(int i = location+1; i < vin_length; i++){ pre_right.push_back(pre[i]); vin_right.push_back(vin[i]); } res->left = reConstructBinaryTree(pre_left, vin_left); res->right = reConstructBinaryTree(pre_right, vin_right); return res; } };
相关文章推荐
- 二叉树以及二叉搜索树的重建
- 剑指Offer面试题6重建二叉树(根据前序中序输出后序)
- 重建二叉树
- 3.8 二叉树中结点最大的距离 & 重建二叉树 & 顺序遍历二叉树
- 【剑指offer】面试题6:重建二叉树
- 【剑指offer】重建二叉树&&二叉树的递归与非递归遍历
- 《剑指offer》重建二叉树
- 【面试题】剑指Offer-6-根据前序和中序遍历重建二叉树
- 由二叉树重建所引出的算法
- 《剑指Offer_编程题》详解重建二叉树
- 面试题6:重建二叉树(前序遍历和中序遍历)
- 二叉树的遍历(篇5)由中序和先序序列重建二叉树
- 《剑指Offer》面试题6:重建二叉树
- 编程之美之重建二叉树
- 面试题6:重建二叉树
- 重建二叉树
- 剑指offer 面试题6 重建二叉树 java版答案
- 剑指offer---重建二叉树
- 重建二叉树
- openjudge 重建二叉树3