原题链接:PAT1127

解析:本题要求按s形层次遍历二叉树,如此一来建树就成了首要目的,然后再利用栈的先进后出的特性来s形遍历。于是难点主要放在了如何根据后序遍历和中序遍历来建立一颗二叉树。

代码实例:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<stack>
using namespace std;
const int maxn = 50;
int post[maxn],in[maxn];
struct Node{int data;Node *ls,*rs;int level;
};
Node* BuildTree(Node *root,int l1,int r1,int l2,int r2,int level){if(l1 > r1)    return NULL;root = new Node();root->data = post[r1];root->level = level;int p = l2;while(in[p] != post[r1])  p++;int len = p-l2;root->ls = BuildTree(root->ls,l1,l1+len-1,l2,l2+len-1,level+1);root->rs = BuildTree(root->rs,l1+len,r1-1,l2+len+1,r2,level+1);return root;
}
void printTree(Node *root){if(root->ls != NULL) printTree(root->ls);cout << root->data << " ";if(root->rs != NULL)  printTree(root->rs);return;
}
int main()
{int n;scanf("%d",&n);for(int i = 0;i < n;i++)  scanf("%d",&in[i]);for(int i = 0;i < n;i++) scanf("%d",&post[i]);Node* root;root = BuildTree(root,0,n-1,0,n-1,0);//printTree(root);stack<Node> sa,sb;printf("%d",root->data);if(root->rs != NULL) sa.push(*root->rs);if(root->ls != NULL)  sa.push(*root->ls);while(sa.size() || sb.size()){while(sa.size()){Node a = sa.top();sa.pop();printf(" %d",a.data);if(a.level%2 == 0){if(a.rs != NULL)  sb.push(*a.rs);if(a.ls != NULL)    sb.push(*a.ls);}else{if(a.ls != NULL)  sb.push(*a.ls);if(a.rs != NULL)    sb.push(*a.rs);}}while(sb.size()){Node b = sb.top();sb.pop();printf(" %d",b.data);if(b.level%2 == 0){if(b.rs != NULL) sa.push(*b.rs);if(b.ls != NULL)    sa.push(*b.ls);}else{if(b.ls != NULL)  sa.push(*b.ls);if(b.rs != NULL)    sa.push(*b.rs);}}}return 0;
}

转载于:https://www.cnblogs.com/long98/p/10352181.html

PAT1127 如何根据后序遍历中序遍历建树?相关推荐

  1. 【C++】二叉树的先序、中序、后序遍历序列

    二叉树常用到的遍历有这三种 先序遍历:先遍历根节点,然后再分别遍历左节点和右节点.(根左右) 中序遍历:先遍历左节点,然后再遍历根节点,最后遍历右节点.(左根右) 后序遍历:先遍历左节点,然后再遍历右 ...

  2. python数据结构与算法:二叉树及三种遍历方式(先序遍历/中序遍历/后序遍历)

    树的实现采用queue的形式: 树的三种遍历方式(广度优先白能力法):先序遍历(根左右),中序遍历(左根右)以及后序遍历(左右根) ######################P6.4 数据结构### ...

  3. NC45实现二叉树先序、中序和后序遍历

    文章目录 解法1:Morris 算法 题目地址   如标题,实现二叉树的三序遍历. 例   输入:1, 2, 3   输出:[[1, 2, 3], [2, 1, 3], [2, 3, 1]]   输出 ...

  4. 给定二叉树先序、中序遍历序列,求后序遍历

    给定一个二叉树的前序遍历和中序遍历的序列,输出对应这个二叉树的后续遍历序列. 输入描述: 输入为一行. 两个字符串,分别表示二叉树的前序遍历和中序遍历结果,用空格分隔.保证数据合法 输出描述: 对应输 ...

  5. 常考数据结构与算法:实现二叉树先序,中序和后序遍历

    题目描述 分别按照二叉树先序,中序和后序打印所有的节点. 输入 {1,2,3} 返回值 [[1,2,3],[2,1,3],[2,3,1]] import java.util.ArrayList;cla ...

  6. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历(java实现)

    分别用递归和非递归方式实现二叉树先序.中序和后序遍历 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点.我们约定:先序遍历顺序 为根.左.右;中序遍历顺序为左.根.右;后序遍历顺序为左 ...

  7. 数据结构-简单实现二叉树的先序、中序、后序遍历(java)

    第一步:创建一颗二叉树 public class Node { private int data;//数据域private Node leftNode;//左孩子private Node rightN ...

  8. 算法练习day10——190328(二叉树的先序、 中序、 后序遍历, 包括递归方式和非递归方式、找到一个节点的后继节点、二叉树的序列化和反序列化)

    1.实现二叉树的先序. 中序. 后序遍历, 包括递归方式和非递归方式 1.1 访问节点的顺序 节点访问顺序如下图所示: 访问顺序:1 2 4 4 4 2 5 5 5 2 1 3 6 6 6 3 7 7 ...

  9. [转载]二叉树先序、中序、后序三种遍历的非递归算法

    本贴给出二叉树先序.中序.后序三种遍历的非递归算法,此三个算法可视为标准算法. 1.先序遍历非递归算法 #define maxsize 100 typedef struct { Bitree Elem ...

  10. 二叉树的先序、中序、后序遍历

    记得有次被别人问起二叉树的先序遍历,竟然不清楚?当然读书的时候是知道的,工作后有点忘了,只知道它是利用栈递归遍历的,至于这里的先序的"先",到底指的是先遍历左子树还是先遍历根节点给 ...

最新文章

  1. HDU4549 M斐波那契数列(矩阵快速幂+费马小定理)
  2. Spring.NET教程(二十)——整合Quartz.NET(应用篇)
  3. windows本地凭据备份与还原
  4. 在Docker和Kubernetes上运行MongoDB微服务
  5. Springboot整合junit单元测试
  6. Ant Design 遭删库!
  7. 三种文本特征提取(TF-IDF/Word2Vec/CountVectorizer)
  8. Laravel文档阅读笔记-How to use @auth and @guest directives in Laravel
  9. npm的package.json和package-lock.json更新策略
  10. 【Domoticz】玩转Domoticz平台——配合ESPEasy固件,开个头,以后玩起来起来再更新博客
  11. 活动选择与小船过河问题(贪心算法)
  12. kali下经典的ddos攻击软件_Kali-DDoS工具集合
  13. 低代码助力生产管理:车间管理系统
  14. leaflet流入迁徙图(canvas技术)(leaflet篇.71)
  15. patch-package打补丁
  16. CodeForces 786A Berzerk 博弈?BFS瞎搞
  17. 小厂B端产品啥都干——B端表格设计入门指南(中)
  18. Excel 筛选重复值和删除重复值的异同
  19. [CodeChef Trips]Children Trips
  20. mac请在微信客户端连接服务器,微信官方Mac版客户端,这次是真的。

热门文章

  1. 初识Memcached
  2. linux change linux login shell
  3. ios------进度轮
  4. MongoDB的学习--聚合
  5. jmx使用应该注意的基本规范
  6. 第一天学习Android的一些笔记
  7. iBATIS In Action:使用映射语句(一)
  8. Python新型字符串格式漏洞分析
  9. Java基础--类与对象
  10. Python——pyiso8601