本文实例讲述了C++基于先序、中序遍历结果重建二叉树的方法。分享给大家供大家参考,具体如下:

题目:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
实现代码:
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
//创建二叉树算法
TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> mid)
{
int nodeSize = mid.size();
if (nodeSize == 0)
return NULL;
vector<int> leftPre, leftMid, rightPre, rightMid;
TreeNode* phead = new TreeNode(pre[0]); //第一个当是根节点
int rootPos = 0; //根节点在中序遍历中的位置
for (int i = 0; i < nodeSize; i++)
{
if (mid[i] == pre[0])
{
rootPos = i;
break;
}
}
for (int i = 0; i < nodeSize; i++)
{
if (i < rootPos)
{
leftMid.push_back(mid[i]);
leftPre.push_back(pre[i + 1]);
}
else if (i > rootPos)
{
rightMid.push_back(mid[i]);
rightPre.push_back(pre[i]);
}
}
phead->left = reConstructBinaryTree(leftPre, leftMid);
phead->right = reConstructBinaryTree(rightPre, rightMid);
return phead;
}
//打印后续遍历顺序
void printNodeValue(TreeNode* root)
{
if (!root){
return;
}
printNodeValue(root->left);
printNodeValue(root->right);
cout << root->val<< " ";
}
int main()
{
vector<int> preVec{ 1, 2, 4, 5, 3, 6 };
vector<int> midVec{ 4, 2, 5, 1, 6, 3 };
cout << "先序遍历序列为 1 2 4 5 3 6" << endl;
cout << "中序遍历序列为 4 2 5 1 6 3" << endl;
TreeNode* root = reConstructBinaryTree(preVec, midVec);
cout << "后续遍历序列为 ";
printNodeValue(root);
cout << endl;
system("pause");
}
/*
测试二叉树形状:
1
2 3
4 5 6
*/
运行结果:
先序遍历序列为 1 2 4 5 3 6 中序遍历序列为 4 2 5 1 6 3 后续遍历序列为 4 5 2 6 3 1 请按任意键继续. . .
希望本文所述对大家C++程序设计有所帮助。
# C++
# 先序
# 中序
# 遍历
# 重建
# 二叉树
# C++ 非递归实现二叉树的前中后序遍历
# C++树之遍历二叉树实例详解
# C++ 数据结构二叉树(前序/中序/后序递归、非递归遍历)
# C++ 遍历二叉树实例详解
# 一波二叉树遍历问题的C++解答实例分享
# C++非递归队列实现二叉树的广度优先遍历
# C++实现二叉树非递归遍历方法实例总结
# C++超详细实现二叉树的遍历
# 第一个
# 给大家
# 不含
# 请按
# 在中
# 中都
# 所述
# 程序设计
# 讲述了
# class
# brush
# cpp
# endl
# midVec
# pre
# gt
# vector
# stack
相关文章:
Android自定义listview布局实现上拉加载下拉刷新功能
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
建站主机服务器选购指南:轻量应用与VPS配置解析
建站之星如何快速更换网站模板?
广州商城建站系统开发成本与周期如何控制?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
如何快速使用云服务器搭建个人网站?
婚礼视频制作网站,学习*后期制作的网站有哪些?
北京网站制作公司哪家好一点,北京租房网站有哪些?
家具网站制作软件,家具厂怎么跑业务?
如何在服务器上配置二级域名建站?
建站主机选择指南:服务器配置与SEO优化实战技巧
如何在万网自助建站中设置域名及备案?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
如何通过建站之星自助学习解决操作问题?
网站专业制作公司有哪些,做一个公司网站要多少钱?
如何通过FTP服务器快速搭建网站?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
建站之星会员如何解锁更多建站功能?
定制建站如何定义?其核心优势是什么?
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
如何在阿里云服务器自主搭建网站?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
如何在阿里云部署织梦网站?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
建站主机默认首页配置指南:核心功能与访问路径优化
已有域名和空间如何快速搭建网站?
c# await 一个已经完成的Task会发生什么
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
大同网页,大同瑞慈医院官网?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
网站制作软件有哪些,制图软件有哪些?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
如何选择域名并搭建高效网站?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
建站之星导航如何优化提升用户体验?
高防服务器租用指南:配置选择与快速部署攻略
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
实例解析angularjs的filter过滤器
济南网站建设制作公司,室内设计网站一般都有哪些功能?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
C#如何使用XPathNavigator高效查询XML
*请认真填写需求信息,我们会在24小时内与您取得联系。