博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指 Offer 07. 重建二叉树
阅读量:4034 次
发布时间:2019-05-24

本文共 1393 字,大约阅读时间需要 4 分钟。

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

例如,给出

前序遍历 preorder = [3,9,20,15,7]

中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:

3

/

9 20
/
15 7

限制:

0 <= 节点个数 <= 5000

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

C++

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ /* 递归停止条件:输入列表空了 返回什么:  树的根节点 本级递归干什么: 申请当前节点,建立左子树,建立右子树 */class Solution {
public: TreeNode* buildTree(vector
& preorder, vector
& inorder) {
if(!preorder.size()) return NULL; return dfs(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1); } TreeNode* dfs(vector
& preorder, vector
& inorder,int pl, int pr,int il,int ir) {
if(il>ir) return NULL; //找到根在中序遍历中的索引 int index=0; for(int i=il;i<=ir;i++){
if(inorder[i]==preorder[pl]){
index=i; break; } } //建树 TreeNode* root=new TreeNode(preorder[pl]); //根节点 int k=index-il; //左子树个数 root->left=dfs(preorder,inorder,pl+1,pl+k,il,index-1); root->right=dfs(preorder,inorder,pl+1+k,pr,1+index,ir); return root; }};
你可能感兴趣的文章
python使用win32*模块模拟人工操作——城通网盘下载器(一)
查看>>
python append 与浅拷贝
查看>>
Matlab与CUDA C的混合编程配置出现的问题及解决方案
查看>>
python自动化工具之pywinauto(零)
查看>>
python一句话之利用文件对话框获取文件路径
查看>>
PaperDownloader——文献命名6起来
查看>>
PaperDownloader 1.5.1——更加人性化的文献下载命名解决方案
查看>>
如何将PaperDownloader下载的文献存放到任意位置
查看>>
C/C++中关于动态生成一维数组和二维数组的学习
查看>>
JVM最简生存指南
查看>>
漂亮的代码,糟糕的行为——解决Java运行时的内存问题
查看>>
Java的对象驻留
查看>>
logback高级特性使用(二) 自定义Pattern模板
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
可扩展、高可用服务网络设计方案
查看>>
如何构建高扩展性网站
查看>>
微服务架构的设计模式
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>