玩转二叉树

给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。

输入格式:

输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。

输出格式:

在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:
7
1 2 3 4 5 6 7
4 1 3 2 6 5 7
输出样例:
4 6 1 7 5 3 2

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

#include<bits/stdc++.h>
using namespace std;
template<class T>
struct treeNode{T data;treeNode *L_child,*R_child;
}; template<class T>
class Tree{public://构造函数,类一声明就运行 Tree(){this->root = new treeNode<T>();root->L_child=root->R_child=NULL; }//返回树的根节点,将root根节点放在私有成员中,在公共方法调用返回使用,提高安全性 treeNode<T>* getRoot(){return this->root;};//创建树节点 ,传递的参数是,中序遍历的数组下标起始和终点,结点的值的下标 treeNode<T>* createNode(int top,int end,int num){if(num>=n||num<0) return NULL;   //前序遍历下标超过n或小于0返回NULL if(top>end) return NULL; int i;for(i=top;i<=end;i++){if(LNROrder[i]==NLROrder[num]) break;}treeNode<T> *node = new treeNode<T>();node->data=NLROrder[num];node->L_child=createNode(top,i-1,num+1);node->R_child=createNode(i+1,end,num+i-top+1);return node;};//输入先序遍历和中序遍历的序列void getOrder(int m){this->n=m;for(int i=0;i<n;i++){cin>>LNROrder[i];}for(int i=0;i<n;i++){cin>>NLROrder[i];}};//将二叉树的左右孩子交换 void changeLR(treeNode<T> *root){if(root==NULL) return;treeNode<T> *temp;temp=root->L_child;root->L_child=root->R_child;root->R_child=temp;changeLR(root->L_child);changeLR(root->R_child);};//层次遍历void  levelFind(treeNode<T> *root){queue<treeNode<T>*> q;treeNode<T> *p;q.push(root);while(!q.empty()){p=q.front();if(p==root){  //这里要注意输出格式,题目每个输出样例的末尾没有空格。 cout<<p->data;}else{cout<<" "<<p->data;}if(p->L_child!=NULL){q.push(p->L_child);}if(p->R_child!=NULL){q.push(p->R_child);}q.pop(); }}private:treeNode<T> *root;//根节点T LNROrder[35];//存储中序遍历数组T NLROrder[35];//存储先序遍历数组int n;//存储遍历长度
}; int main()
{int n;while(cin>>n){Tree<int> *tree = new Tree<int>();tree->getOrder(n);treeNode<int> *root = tree->getRoot();root = tree->createNode(0,n-1,0);tree->changeLR(root);tree->levelFind(root);}
}

解题思路
二叉树,我前面写了一题交换二叉树的左孩子和右孩子,题目说镜像,其实就是左右孩子交换,交换其实很简单,大家可以看方法changeLR(treeNode/< T> * root)函数,就是交换左右孩子函数。然后层次遍历,层次遍历就是按照从上到下,从左到右的顺序遍历输出。需要用到队列,先存入根节点,循环判断队列不为空,输出队首元素的值,然后如果队首元素的左孩子和右孩子存在的情况下,存入队列,队头出队即可。我之前写过的一题层次遍历,用的是同样的方法。
然后我用的是模板类,害,写了这么多题都是用到模板类,用类方法去写代码我感觉清爽很多,大家也可以尝试多用类去写。

C++数据结构——玩转二叉树相关推荐

  1. sdut 3341数据结构实验之二叉树二:遍历二叉树

    数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000MS Memory Limit: 65536K Problem Description 已知二叉树的一个按先序遍历输入的字符序列,如 ...

  2. 【算法与数据结构】查找二叉树的实现

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.题目介绍     二叉树是一种基本的数据结构.查找二叉树是一种方便与查找,删除,插入等功能的二叉树,它要求每 ...

  3. 数据结构34:二叉树前序遍历、中序遍历和后序遍历

    链式存储结构存储的二叉树,对树中结点进行逐个遍历时,由于是非线性结构,需要找到一种合适的方式遍历树中的每个结点. 递归思想遍历二叉树 之前讲过,树是由根结点和子树部分构建的,对于每一棵树来说,都可以分 ...

  4. 数据结构之求二叉树的所有叶子和以及叶子总数

    1.题目 数据结构之求二叉树的所有叶子和以及叶子总数         2.代码实现 tree.java package leetcode.chenyu.test;public class Tree { ...

  5. 数据结构与算法--二叉树第k个大的节点

    二叉树第k个大的节点 二叉树文章列表: 数据结构与算法–面试必问AVL树原理及实现 数据结构与算法–二叉树的深度问题 数据结构与算法–二叉堆(最大堆,最小堆)实现及原理 数据结构与算法–二叉查找树转顺 ...

  6. 数据结构与算法-- 二叉树中和为某一值的路径

    二叉树中和为某一值的路径 题目:输入一颗二叉树和一个整数,打印出二叉树中节点值的和为给定值的所有路径.从树的根节点开始往下一只到叶子节点所经过的节点形成一条路径. 我们用二叉树节点的定义沿用之前文章中 ...

  7. 数据结构与算法-- 二叉树后续遍历序列校验

    二叉树后续遍历序列校验 题目:输入一个整数数组,判断改数组是否是某个二叉搜索树的后续遍历结果,如果是返回true否则false,假设输入数组的任意两个数字不相同. 例如输入{5,7,6,9,11,10 ...

  8. C语言 数据结构 树和二叉树

    树 1.树:是n节点的有限集.树是n(n=>0)个节点的有限集. n=0时成为空树. 在任意一颗非空树中:(1)有且仅有一个称为根的节点:(2)当n>0时,其余节点可分为m(m>0) ...

  9. 7-11 玩转二叉树 (25 分)

    7-11 玩转二叉树 (25 分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的 ...

最新文章

  1. sizeof 头文件_c/c++基础之sizeof用法
  2. Maven的学习资料收集--(九) 构建SSH项目以及专栏maven
  3. 最后解密的两弹元勋,众帅之帅朱光亚。
  4. docker rabbitmq:3.9.10-management
  5. gis发布及应用服务器,超图云GIS应用服务器平台
  6. 前端动画 wow.js 效果
  7. 域名使用cname方式跳转不到新域名_七牛云图床和Markdown使用
  8. 修改Tomcat窗口名称
  9. 部署SpringBoot项目到腾讯云或其他服务器
  10. Java ArrayList的Array,Array的ArrayList
  11. 不使用第三个变量的情况下,实现两个变量间的互换。
  12. SitePoint播客#160:坐在树上的Adobe和HTML
  13. 硬件学习笔记(一)AD入门+STM32C8T6最小开发板得制作
  14. 配置TensorFlow的cuda环境教程
  15. UE4中英文语言切换的三种方式(当然也可以多种语言)
  16. java+英尺英寸,以英尺和英寸显示英尺的小数点(javascript)
  17. [交互][FWT] UOJ #328. 【UTR #3】量子破碎
  18. ES6:字符串的扩展及新增方法
  19. “有源传感器”和“无源传感器”
  20. 802.11ac路由选购技术攻略

热门文章

  1. 新技能get,微信提现这样操作可免手续费
  2. 天使与海豚的爱情故事
  3. position属性absolute与relative 详解 不为人知的(fixed)绝对定位(fixed相对于浏览器窗口=不动的div)
  4. Transformer 五年引用超四万,其中六位作者创立五家创业公司
  5. 右键栏添加管理员获取所有权
  6. Google挥刀自宫给站长看
  7. KDD Cup 2020多模态召回比赛季军方案与广告业务应用
  8. 论文排版图片一栏设置与文献引用的超链接设置-论文投稿经验总结-第3期
  9. 亲爱的老狼-display的应用
  10. 华为机试——翻译电话号码