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

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

题目描述

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

我的代码:

1 class Solution { 2 public: 3      TreeNode* reConstructBinaryTree(vector
pre,vector
vin) { 4 if(pre.empty() || vin.empty()) 5 return NULL; 6 TreeNode* pRoot = new TreeNode(pre[0]); 7 vector
vleft,vright,pleft,pright; 8 int len = vin.size(); 9 int i = 0;10 for(; i < len; i++)11 {12 if(vin[i] == pRoot->val)13 break;14 vleft.push_back(vin[i]);15 pleft.push_back(pre[i+1]);16 }//i的个数为 该跟的左子树17 for(int j = i+1; j < len; j++)18 {19 vright.push_back(vin[j]);20 pright.push_back(pre[j]);21 }22 pRoot->left = reConstructBinaryTree(pleft,vleft);23 pRoot->right = reConstructBinaryTree(pright,vright);24 return pRoot;25 }26 };

思路:前序遍历的第一个节点一定是根节点,在中序遍历中找到这个节点,左边的为左子树,右边的为右子树。

将左子树的前序和中序传入函数返回的值为根的左孩子

将右子树的前序和中序传入参数返回的值为根的右孩子

这样递归的找,就会重建成二叉树。

 

转载于:https://www.cnblogs.com/Lune-Qiu/p/8907886.html

你可能感兴趣的文章
[LeetCode] 862. Shortest Subarray with Sum at Least K
查看>>
【分享】终端命令工具 自动生成vue组件文件以及修改router.js
查看>>
[LeetCode] Student Attendance Record I
查看>>
PHP回顾之多进程编程
查看>>
spring boot + redis
查看>>
Ajax技术细节
查看>>
nuxt.js部署vue应用到服务端过程
查看>>
删除数组中的指定元素 | JavaScript
查看>>
CSS3+JS实现静态圆形进度条【清晰、易懂】
查看>>
关于树形插件展示中数据结构转换的算法
查看>>
图片加载框架之Fresco
查看>>
高性能web建站规则(将js放在页面底部)
查看>>
Java EnumMap工作原理及实现
查看>>
阐述Spring框架中Bean的生命周期?
查看>>
虚拟内存管理
查看>>
注水、占坑、瞎掰:起底机器学习学术圈的那些“伪科学”
查看>>
大数据小视角1:从行存储到RCFile
查看>>
第18天:京东网页头部制作
查看>>
好消息:Dubbo & Spring Boot要来了
查看>>
面向对象封装的web服务器
查看>>