剑指Offer——重建二叉树——C++
来源:互联网 发布:木材砍伐数据 编辑:程序博客网 时间:2024/05/29 16:28
重建二叉树
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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) {
int
len = in.size();
if
(len ==
0
){
return
NULL;
}
vector<
int
> left_pre, right_pre;
vector<
int
> left_in, right_in;
TreeNode *head =
new
TreeNode(pre[
0
]);
int
index =
0
;
for
(
int
i=
0
; i<len; i++){
if
(in[i] == pre[
0
]){
index = i;
break
;
}
}
for
(
int
i=
0
; i<index; i++){
left_pre.push_back(pre[i+
1
]);
left_in.push_back(in[i]);
}
for
(
int
i=index+
1
; i<len; i++){
right_pre.push_back(pre[i]);
right_in.push_back(in[i]);
}
//TreeNode* root = new TreeNode(pre[0]);
head->left = reConstructBinaryTree(left_pre, left_in);
head->right = reConstructBinaryTree(right_pre, right_in);
return
head;
}
};
0 0
- 剑指offer(C++)——重建二叉树
- 剑指offer(C++)——重建二叉树
- 剑指offer——重建二叉树
- 《剑指offer》——重建二叉树
- 剑指Offer——重建二叉树
- 剑指offer——重建二叉树
- 重建二叉树——剑指offer
- 剑指offer——重建二叉树
- 剑指offer——重建二叉树
- 剑指offer——重建二叉树
- 剑指offer——重建二叉树
- 剑指offer——重建二叉树
- 剑指offer——重建二叉树
- 剑指offer—重建二叉树
- 《剑指offer》—4、重建二叉树
- 剑指offer(4)—重建二叉树
- 剑指offer—重建二叉树
- 剑指Offer——重建二叉树——C++
- maven jetty 启动正常,运行却一直报404
- nyoj 求余数
- 客户端动态化系列之——URLRoute
- 欢迎使用CSDN-markdown编辑器
- 第十一周项目2—用二叉树求解代数表达式
- 剑指Offer——重建二叉树——C++
- 自定义竖直旋转显示文字的TextView
- JAVA 笔记(三) 从源码深入浅出集合框架
- 拦截器 Strut2
- Android studio工具栏不见了
- React Native嵌入Android原生项目中
- InputStream对象的重复使用
- 根据进程名称杀死多个进程
- TCP三次握手四次挥手详解