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

关注济南网站建设网络营销推广专员

关注济南网站建设,网络营销推广专员,安卓wordpress,企业网站的常见类型有什么题目如下: 一个二叉树,树中每个节点的权值互不相同。 现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。 输入格式 第一行包含整数 N,表示二叉树的节点数。 第二行包含 N 个整数,表示二叉树的后序遍历。 第…

题目如下:

一个二叉树,树中每个节点的权值互不相同。

现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。

输入格式

第一行包含整数 N,表示二叉树的节点数。

第二行包含 N 个整数,表示二叉树的后序遍历。

第三行包含 N 个整数,表示二叉树的中序遍历。

输出格式

输出一行 N 个整数,表示二叉树的层序遍历。

数据范围

1≤N≤30,
官方并未给出各节点权值的取值范围,为方便起见,在本网站范围取为 1∼N。

输入样例:

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

输出样例:

4 1 6 3 5 7 2

 中序遍历:遵循规则左根右(1,2,3,4,5,6,7)

后序遍历:遵循规则左右根(2,3,1,5,7,6,4)

如题,它的树长这样:

可以得知,后序遍历最后一个位置即为该树的根结点,找到中序遍历中根结点位置,即可判断出左子树与右子树结点个数,即 4 为根结点值,在中序遍历中其前面与后面各有 3 个节点,因此     1,2,3为左子树各结点值,5,6,7为右结点各结点值,再递归到左子树与右子树重复该操作,即可得到该树的结构

代码如下:

        

#include <iostream>
#include <vector>
#include <queue>
using namespace std;const int N = 35;//定义树结构
typedef struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeNode(int value) : val(value), left(nullptr), right(nullptr) {} //构造函数
}TreeNode;//建立树结构
TreeNode* BuildTree(vector<int>& postorder, vector<int>& inorder, int postEnd, int inStart, int inEnd) {if(postEnd <= 0 || inStart >= inEnd)return nullptr;//找到根节点,并开辟空间int rootval = postorder[postEnd];TreeNode* root = new TreeNode(rootval);//找到该根节点在中序遍历中的位置int rootIndexInInOrder = 0;for(rootIndexInInOrder = inStart; rootIndexInInOrder <= inEnd; rootIndexInInOrder++){if(inorder[rootIndexInInOrder] == rootval){break;}}//计算出右子树个数int rightTreeSize = inEnd - rootIndexInInOrder;//递归左右子树root->right = BuildTree(postorder, inorder, postEnd - 1, rootIndexInInOrder + 1, inEnd);root->left = BuildTree(postorder, inorder, postEnd - 1 - rightTreeSize, inStart, rootIndexInInOrder - 1);return  root;
}//树的层序遍历
vector<int> GetLevelOrderVal(TreeNode* root){vector<int> res;if(!root)    return res;queue<TreeNode*> q;q.push(root);while(!q.empty()){auto node = q.front();q.pop();res.push_back(node->val);if(node->left)      q.push(node->left);if(node->right)     q.push(node->right);}return res;
}int main(){vector<int> postorder(N);vector<int> inorder(N);int n = 0;cin >> n;for(int i = 0; i < n; i++)      cin >> postorder[i];for(int i = 0; i < n; i++)      cin >> inorder[i];TreeNode* root = BuildTree(postorder, inorder, n - 1, 0, n - 1);vector<int> res = GetLevelOrderVal(root);for(auto& val : res)cout << val << " ";cout << endl;return 0;
}

http://www.yayakq.cn/news/403026/

相关文章:

  • 东莞阳光网站投诉平台公司手机网站效果图
  • seo优化或网站编辑黑群晖搭建wordpress外网访问
  • 免费的简历制作网站单页面视频网站模板
  • seo网站诊断价格深圳福田华丰大厦网站建设
  • 株洲建设工程造价信息网站苏州市建设局招标网站首页
  • 网站建设要多少钱app前端开发就是做网站吗
  • 网站建设实施过程互联网金融p2p网站建设
  • 网站幕布拍摄wordpress后台打开太慢
  • 做网站广告联盟赚钱国外做logo的网站
  • 临海市住房与城乡建设规划局网站电商平台商城系统搭建
  • 帝国手机网站cms系统二手房交易税费
  • 西安做网站的公司地址东莞定制网站建设
  • html网站设计作品丰镇市网站
  • 南京地区网站开发知名网站建设推广
  • 昆明网红自动优化网站建设电话
  • 网站百度排名怎么做快wordpress重装
  • 游戏类企业网站模板建设一个网站成本多少钱
  • 一个网站怎么做软件好用网站开发需要哪些技术人员
  • seo对于电子商务网站推广的作用兰州装修公司有哪些
  • 公司如何做网站推广中国十大服装设计院校
  • 定制网站开发公司哪家好?点击查看平面图设计网站
  • 深圳购物网站建企业形象通用网站
  • 做外贸网站有什么用可信网站 quot 验证能防范哪些安全.
  • 婴儿网站模板wordpress 局域网访问不了
  • 嘉兴网站制作套餐上海市建筑建材业网招标公告
  • 工程机械 网站模板网站备案幕布ps
  • 山西焦煤集团公司网站物联网专业
  • 做淘宝客要有网站吗泰安网络公司推荐
  • 做精细化工网站邯郸网站优化建设
  • 做logo的ppt模板下载网站五台建设局网站