剑指offer-算法题练习:part4 重建二叉树
2016-09-27 23:09
591 查看
剑指offer-算法题练习:part4 重建二叉树
时间限制:1秒空间限制:32768K
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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:
struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {
//判断是否为空
if (in.empty()) {
return NULL;
}
TreeNode *root = new TreeNode(pre[0]);
// 处理中序遍历的vector
vector<int>::const_iterator itr = find(in.cbegin(), in.cend(), pre[0]);
vector<int> leftIn(in.cbegin(), itr);
vector<int> rightIn(itr + 1, in.cend());
// 处理前序遍历的vector
int leftPreSize = leftIn.size();
vector<int> leftPre(pre.cbegin() + 1, pre.cbegin() + leftPreSize + 1);
vector<int> rightPre(pre.cbegin() + leftPreSize + 1, pre.cend());
// 递归
root->left = reConstructBinaryTree(leftPre, leftIn);
root->right = reConstructBinaryTree(rightPre, rightIn);
return root;
}
};
时间限制:1秒空间限制:32768K
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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:
struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {
//判断是否为空
if (in.empty()) {
return NULL;
}
TreeNode *root = new TreeNode(pre[0]);
// 处理中序遍历的vector
vector<int>::const_iterator itr = find(in.cbegin(), in.cend(), pre[0]);
vector<int> leftIn(in.cbegin(), itr);
vector<int> rightIn(itr + 1, in.cend());
// 处理前序遍历的vector
int leftPreSize = leftIn.size();
vector<int> leftPre(pre.cbegin() + 1, pre.cbegin() + leftPreSize + 1);
vector<int> rightPre(pre.cbegin() + leftPreSize + 1, pre.cend());
// 递归
root->left = reConstructBinaryTree(leftPre, leftIn);
root->right = reConstructBinaryTree(rightPre, rightIn);
return root;
}
};
相关文章推荐
- 剑指offer-算法题练习:part20 二叉树的镜像
- 剑指offer-算法题练习:part12 数值的整数次方
- 剑指offer-算法题练习:part17 反转链表
- 剑指offer-算法题练习:part11 二进制中1的个数
- 剑指offer-算法题练习:part8 跳台阶-斐波那契数列问题
- [剑指offer]算法4 重建二叉树
- 剑指offer-算法题练习:part15 调整数组顺序使奇数位于偶数前面
- 剑指offer-算法题练习:part18 合并两个排序的链表
- 剑指offer-算法题练习:part21 顺时针打印矩阵
- 剑指offer-算法题练习:part22 包含min函数的栈
- 剑指offer-算法题练习:part7 斐波那契数列-斐波那契数列问题
- 剑指offer-算法题练习:part14 c++多线程—2个线程并发售票系统-烽火众智
- 剑指offer-算法题练习:part16 链表中倒数第k个结点
- 剑指offer-算法题练习:part6 旋转数组的最小数字
- 剑指offer-算法题练习:part9 变态跳台阶-斐波那契数列问题
- 【九度OJ1385】|【剑指offer6】重建二叉树
- 剑指Offer - 九度1385 - 重建二叉树
- 【剑指Offer面试编程题】题目1385:重建二叉树--九度OJ
- 剑指Offer之 - 重建二叉树
- 剑指offer面试题6 重建二叉树(java)