当前位置: 首页 > news >正文

动态表白网站制作叶涛网站推广优化

动态表白网站制作,叶涛网站推广优化,wordpress安装到虚拟主机,建设企业网站企业网上银行登录官网下载重建二叉树引言问题:现有二叉树的后序遍历序列与中序遍历序列,能否求原二叉树?答案是肯定的,并且前序与中序也可以得到原二叉树。本文就如何使用这两种序列组合如何重建二叉树进行讨论。首先,定义二叉树的遍历。二叉树…

0fc992330b8fcc18211cec13bd810172.png

重建二叉树

引言

问题:现有二叉树的后序遍历序列与中序遍历序列,能否求原二叉树?

答案是肯定的,并且前序与中序也可以得到原二叉树。

本文就如何使用这两种序列组合如何重建二叉树进行讨论。

首先,定义二叉树的遍历。

二叉树的遍历

对于一个二叉树的遍历,有以下原则:

- 遇到一个根节点,先访问左节点,再访问右节点

而前,后,中序遍历分别指根节点在访问左右节点之前,之间,之后。

如何重建?

那么根据二叉树遍历的定义,对一个最简单的只有一个根节点与左右节点的二叉树,来尝试重建。

设一个二叉树为下图左所示,它的前,中,后序遍历序列分别如下图右所示:

359062a02bdc3f609e2b73270232729e.png
假设我们只知道后序与中序,如何重建呢?
  1. 显然,后序的最后一个数字就是根节点,也就是 3 是根节点。
  2. 在中序中找到3,它的左边是左节点,右边是右节点。
  3. 最终重建到二叉树:根为3,左节点为7,右节点为1

由上方重建过程思考后,可以推广:

对于更复杂的二叉树,将其先看作上图模型的二叉树,重建得到根节点与暂时混乱的左右节点,再递归的将左右节点依次重建为子二叉树,即可完成整个二叉树的重建。

在得到根节点之后,需要在中序遍历序列中寻找根节点的位置,并将中序序列拆分为左右部分。所以要求序列中不能有相同的数字,这是序列可重建二叉树的前提。

编码抽象

将重建思路抽象之后,我们可以得到如下过程来重建二叉树:

定义二叉树节点

struct TreeNode {int data;TreeNode* left = NULL;TreeNode* right = NULL;
};

设有后序序列vector<int> post与中序序列vector<int> in,现在我们将二叉树重建到以TreeNode* node为根节点的二叉树中。

1. 取出post的最后一个数R,则R为二叉树的根节点
2. 在in中寻找R的位置
3. 从R拆分为左右子二叉树的中序序列:inleft、inright
4. 在post中,从左到右取出inleft.size()个数字,其组成的序列为左子二叉树的后序序列postleft
5. 类比4得到右子二叉树的后序序列postright
6. 分别根据inleft与postleft重建左子二叉树到node->left
7. 类比6重建右子二叉树到node->right

实现

void getTree(vector<int> post, vector<int> in, TreeNode* node) {vector<int> inleft, inright;vector<int> postleft, postright;if (post.size() == 0) return;int rootNum = post[post.size() - 1];post.pop_back();node->data = rootNum;// 将中序遍历拆开bool flag = false;for (int i = 0; i < in.size(); i++) {if (in[i] == rootNum) {flag = true;continue;}if (!flag)inleft.push_back(in[i]);elseinright.push_back(in[i]);}// 将后序遍历拆开for (int i = 0; i < post.size(); i++) {if (i < inleft.size()) {postleft.push_back(post[i]);} else {postright.push_back(post[i]);}}if (inleft.size() > 0) {node->left = new TreeNode;getTree(postleft, inleft, node->left);}if (inright.size() > 0) {node->right = new TreeNode;getTree(postright, inright, node->right);}
}

全文完。

## 我是谁?

我是iimT,大学生,技术宅,计算机科技爱好者,电音小王子。

我的博客:www.iimt.me

我在Weibo:@_iimT

我在B站:https://space.bilibili.com/69824765/#/

想看到我的更多更新的话,很乐意你关注我!

你是谁?

欢迎在文后留下评论,一起讨论,欢迎认识新朋友。

如果你也有博客,在分享你的东西,欢迎交流、友链(见博客底部)。

下一篇见~

http://www.lbrq.cn/news/2736973.html

相关文章:

  • 职高网站建设例题全面的seo网站优化排名
  • 单人做网站搜索引擎的网站
  • 广州seo工作室电池优化大师下载
  • 网站站点不安全电话销售如何快速吸引客户
  • 哪里有做鸭的网站企业网站建设哪家好
  • 黑龙江做网站的公司有哪些郑州网络推广专业公司
  • 网站高防空间杭州百度百科
  • 杭州聚翔网络有限公司seo客服
  • 建设网站的难点seo页面优化技术
  • 秦皇岛网站开发广州新闻报道
  • wordpress本地下载如何快速优化网站排名
  • 做一个营销型网站网站运营一个月多少钱
  • 网站复制按钮怎么做的企业网页设计报价
  • 做动漫的游戏 迅雷下载网站宁波网站排名优化seo
  • 台州椒江网站建设淘词神器
  • 网页设计怎么做网站长沙公司网络营销推广
  • 这样建立网站网站怎么优化关键词排名
  • it外包公司是什么意思seo优化员
  • 自己如何做黑客网站网站建设怎么弄
  • 网站建设百度推广中国十大seo
  • 做一个平台网站大概多少钱惠州seo计费管理
  • 服务范围 网站建设公司郑州seo代理公司
  • 自己做一个网页怎么做搜索关键词排名优化
  • 网站建设柒首先金手指9潍坊快速网站排名
  • 怎么用ppt做网站设计企业查询天眼查
  • 做网站建设的价格google免费入口
  • 全国500强企业排名表搜索引擎优化的目标
  • 孝感市门户网东莞市网络seo推广价格
  • php网站编程地推团队联系方式
  • 在线做免费网站有哪些外贸平台哪个网站最好
  • 使用openssl创建自签名CA并用它签发服务器证书
  • JavaEE 初阶第十九期:网络编程“通关记”(一)
  • 以下是对智能电梯控制系统功能及系统云端平台设计要点的详细分析,结合用户提供的梯控系统网络架构设计和系统软硬件组成,分点论述并补充关键要点:
  • 计算机视觉(opencv)实战五——图像平滑处理(均值滤波、方框滤波、高斯滤波、中值滤波)附加:视频逐帧平滑处理
  • 解决Electron透明窗口点击不影响其他应用
  • Java中Record的应用