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

北京代建网站网页设计报告论文

北京代建网站,网页设计报告论文,五一网站个人空间,外国优秀网站欣赏题目如下: 一个二叉树,树中每个节点的权值互不相同。 现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。 输入格式 第一行包含整数 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/349255/

相关文章:

  • 做模特网站做商城网站应该用什么程序
  • 网站开发主要学什么网站开发立项申请表
  • 做网站要切图吗工地临时工400元一天
  • 网站的做代理商太原市建设交易中心网站
  • 国外网站推广如何做不用模板怎么建设网站
  • 设计师学编程能自己做网站吗腾讯云获取WordPress密码
  • 95598网站服务建设厂房网络推广平台
  • 免费建站公司联系方式培训公司网站建设
  • 北京电商平台网站建设网站seo在线优化
  • 双语网站怎么做中山做网站专业的公司
  • 使用wordpress的购物网站阿里云网站建设优化
  • 淄博企业网站建设哪家专业如何利用网站开发客户
  • wordpress 哪些网站吗网站因备案关闭
  • 摄影作品网站或app字体在线设计网站
  • 网站页面布局优化襄阳网站seo公司
  • 我自己做个网站怎么做茌平做网站公司
  • 简约的网站常州网站设计公司
  • 舟山网站建设seo建自己博客网站
  • 高端网站设计教程什么是网站实施
  • 网站怎么做关键词搜索排面太原关键词排名首页
  • 网站 建设 成品微信营销模式
  • 免费中英文网站模板学做蛋糕什么网站
  • 广州网站建设大公司排名深圳做网站建设和维护专员管理层
  • 张家口网站设计小说网站怎么做词
  • 网站搭建论文wordpress配置要求
  • 泰州做网站软件合肥做网站公司有哪些
  • 做外贸企业网站网站新闻页设计
  • 胶南市场建设服务中心网站管理信息系统
  • 农家院做宣传应该在哪个网站注册网站的免费网址
  • 网站开发商城图片上传中小企业网站制作