全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++基于先序、中序遍历结果重建二叉树的方法

本文实例讲述了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小时内与您取得联系。