递归——层次遍历—交换左右子树算法

思路:
与先序递归遍历类似
1如果有子树,交换这个节点的左右子树(和交换两个变量的值一样)
2再递归这个节点的左子树,右子树;

#include<stdio.h>
#include<bits/stdc++.h>
typedef char TElemType;
typedef int status;
typedef struct BiNode
{TElemType data;struct BiNode *lchild;struct BiNode *rchild;
}BiNode,*BiTree;
void CreateBiTree(BiTree &T)//¶þ²æÊ÷µÄÏÈÐò´´½¨
{TElemType ch;scanf("%c",&ch);if(ch=='#')T=NULL;else {T=(BiNode*)malloc(sizeof(BiNode));if(!T)exit(-1);T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}
}void Exchange_lchild_rchild(BiTree &T)//½»»»×óÓÒº¢×Ó½áµã
{if(T!=NULL)   if(T->lchild!=NULL||T->rchild!=NULL){BiTree temp;temp=T->lchild;T->lchild=T->rchild;T->rchild=temp;Exchange_lchild_rchild(T->lchild);Exchange_lchild_rchild(T->rchild);}}int BiTree_height1(BiTree T)//ÇóÊ÷µÄÉî¶ÈËã·¨1
{if(T==NULL)return 0;else{if(BiTree_height1(T->lchild)>BiTree_height1(T->rchild))return 1+BiTree_height1(T->lchild);elsereturn 1+BiTree_height1(T->rchild);}}
void printNodeAtLevel(BiTree T,int level)
{  if(T==NULL||level<0)  return;  if(level==0)  {  printf("%c ",T->data);return;  }  // ×ó×ÓÊ÷µÄ level - 1 ¼¶  printNodeAtLevel(T->lchild,level-1);  // ÓÒ×ÓÊ÷µÄ level - 1 ¼¶  printNodeAtLevel(T->rchild,level-1);
}void levelOrder(const BiTree T)
{if(T==NULL)return;int totalLevel = BiTree_height1(T);for(int i = 0; i< totalLevel; i++){printNodeAtLevel(T, i);printf("\n");//´òÓ¡ÍêÒ»²ã£¬»»ÐÐ}
} int main(){BiTree T;printf("´´½¨Ê÷ÊäÈëÊ÷TµÄÏÈÐòÐòÁÐ(ÆäÖÐʹÓÃ#´ú±í¿Õ½Úµã)\n");CreateBiTree(T);levelOrder(T);printf("½»»»Ê÷×óÓÒ×ÓÊ÷Ëã·¨\n");Exchange_lchild_rchild(T);levelOrder(T);} 

数据结构——交换左右子树相关推荐

  1. 数据结构——二叉树交换左右子树位置(C语言)

    交换二叉树的左右子树 #include<stdio.h> #include<stdlib.h> #include<queue> #include <iostr ...

  2. 二叉树交换左右子树的递归与非递归算法

    在学习二叉树的相关基本操作时,很多时候都需要运用递归,递归在学习的数据结构与算法中显得非常重要. 递归算法 recursion algorithm在计算机科学中是指一种通过重复将问题分解为同类的子问题 ...

  3. 数据结构之---交换左右子树

    递归实现,直接放代码,有兴趣的可以看我后面的详细解析! //将树B的所有节点的左,右子树进行交换 void Swap(BiTree &T){BiTree temp;if(T){Swap(T-& ...

  4. 二叉树镜像,交换左右子树

    使用递归的思想实现

  5. 数据结构:(翻转二叉树) 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适

    题目 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适?(北京航空航天大学1999,北京工业大学2016) A. 前序 B. 中序 C. 后序 D. 层次 ...

  6. 交换二叉树的每个节点的左右子树

    题目:试编写一个算法将一颗二叉树的所有节点的左右子树进行交换. 分析:         我们仍然可以采用递归的方式进行交换. 代码如下: struct biTree {char data;struct ...

  7. 3003基于二叉链表的二叉树左右子树的交换

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为空) ...

  8. 数据结构 - 二叉树 - 面试中常见的二叉树算法题

    数据结构 - 二叉树 - 面试中常见的二叉树算法题 数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组.链表).栈与队列.树(二叉树.二叉查找树.平衡二叉树.红黑树).图 ...

  9. 数据结构——排序算法(含动态图片)

    目录 插入排序 交换排序 选择排序 归并排序 常用排序算法复杂度和稳定性总结 前言 排序是<数据结构>中最基本的学习内容.排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行 ...

最新文章

  1. oracle time格式化比较,ORACLE DATE和TIMESTAMP数据类型的比较(二) (转)
  2. [转]caffe中solver.prototxt参数说明
  3. hashCode()、equals()以及compareTo()方法的理解
  4. LeetCode 218. 天际线问题(multiset优先队列)*
  5. pytorch中的torch.rand(),torch.randn(),torch.randerm()的关系
  6. android adjust,android adjustresize adjustpan着名的问题
  7. 汇编的一些坑以及部分上机题目的实现
  8. html代码js正则,过滤所有HTML代码和CSS,JS
  9. Kali渗透测试工具库(一)sprata--信息收集扫描爆破集成
  10. 计算机平面设计的专业技能,计算机平面设计专业学生技能培养途径
  11. 机房服务器维护管理规范,机房维护管理规范.pdf
  12. 字节码增强之Javassist
  13. linux安装git lfs
  14. 自定义Navigationbar,使用Catagory
  15. [附源码]JSP+ssm计算机毕业设计校园征兵及退役复原管理系统16z67【源码、数据库、LW、部署】
  16. java.util.StringTokenizer
  17. iPhone4/4s 5.1.1版本越狱后无法连接iTunes,出现0xE8000012错误的解决方法
  18. word文件限制编辑如何解除
  19. XXX售后服务解决方案
  20. 【大牛之路】大牛指导,报酬丰厚的开源项目---“谷歌编程之夏”

热门文章

  1. 谈谈这些年前端的变化
  2. .NET Core第三方开源Web框架YOYOFx
  3. python中字典长度可变吗_Python:如何给字典分配一个长度可变的列表值?
  4. 【QGIS入门实战精品教程】4.4:QGIS如何将点自动连成线、线生成多边形?
  5. 【MATLAB统计分析与应用100例】案例009:创建一个RandStream类对象,调用其randn方法生成标准正态分布随机数
  6. SQL Server 2008 R2 Developer Edition图文安装教程
  7. 数据结构之判断一棵树是不是完满二叉树
  8. React Native之hardwareBackPress
  9. Android系统手机端抓包方法(tcpdump)
  10. Android之自定义属性,format详解