数据结构之---交换左右子树
递归实现,直接放代码,有兴趣的可以看我后面的详细解析!
//将树B的所有节点的左,右子树进行交换
void Swap(BiTree &T){BiTree temp;if(T){Swap(T->lchild);Swap(T->rchild);temp=T->lchild;T->lchild=T->rchild;T->rchild=temp;}
}
解析注:1对应的49,2->50,3->51,想要看图解过程的直接跳过调试解析
1.这段代码是递归实现的,对于我来说有一些难度,我们先画一棵简单的二叉树,做递归步骤实验。看递归是如何运作的,如下一棵二叉树:
用vc6进行调试,第1步(此时的T指向节点1):
第2步(T即将进入了swap函数):
第3步(T指向节点2)
第4步(T符合条件,继续进入函数)
第5步(T指向空,因为上一个节点2没有左孩子)
第6步(此时T不符合条件,然后退出上一个进入的函数,也就是T回退到指向节点2的时候,并走向第二个处理函数)
第7步(进入函数,T依然指向空,因为还是节点2的右孩子为空):
第8步(回退到指向节点2,此时进行经典节点交换,也就是2的左右孩子相互交换,虽然为空,但是计算机是处理了的):
第9步(此时节点2处理完毕,T回退到上一代,指向节点1,并进入对应的第二个函数)
第10步(此时T指向节点3,):
第11步(然后在此节点上,又进行对应的两个函数,和节点2的过程一样,处理完成后T回退到节点1,执行交换函数,1与3相互交换,简单的二叉树交换就完成了。)
3.图解递归(简单二叉树)
数据结构之---交换左右子树相关推荐
- 数据结构——二叉树交换左右子树位置(C语言)
交换二叉树的左右子树 #include<stdio.h> #include<stdlib.h> #include<queue> #include <iostr ...
- 数据结构——交换左右子树
递归--层次遍历-交换左右子树算法 思路: 与先序递归遍历类似 1如果有子树,交换这个节点的左右子树(和交换两个变量的值一样) 2再递归这个节点的左子树,右子树: #include<stdio. ...
- 二叉树交换左右子树的递归与非递归算法
在学习二叉树的相关基本操作时,很多时候都需要运用递归,递归在学习的数据结构与算法中显得非常重要. 递归算法 recursion algorithm在计算机科学中是指一种通过重复将问题分解为同类的子问题 ...
- 二叉树镜像,交换左右子树
使用递归的思想实现
- 数据结构——二叉树的递归算法
二叉树的结构定义: typedef struct BiNode {TElemType data;struct BiNode *lchild;struct BiNode *rchild; }BiNode ...
- 数据结构:(翻转二叉树) 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适
题目 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适?(北京航空航天大学1999,北京工业大学2016) A. 前序 B. 中序 C. 后序 D. 层次 ...
- 交换二叉树的每个节点的左右子树
题目:试编写一个算法将一颗二叉树的所有节点的左右子树进行交换. 分析: 我们仍然可以采用递归的方式进行交换. 代码如下: struct biTree {char data;struct ...
- 3003基于二叉链表的二叉树左右子树的交换
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为空) ...
- MySQL索引相关的数据结构和算法
索引相关的数据结构和算法 通常我们所说的索引是指B-Tree索引,它是目前关系型数据库中查找数据最为常用和有效的索引,大多数存储引擎都支持这种索引.使用B-Tree这个术语,是因为MySQL在CREA ...
最新文章
- Linux下的示例程序
- android 决TextView中MaxLines与ellipsize=end冲突问题
- Java并发——结合CountDownLatch源码、Semaphore源码及ReentrantLock源码来看AQS原理
- 工程实践中最常用的10大数据结构与算法讲解
- 21. Magento 创建新闻模块(2)
- configure: error: gperf is needed
- java 微博 api_Java使用新浪微博API开发微博应用的基本方法
- hustoj mysql_hustoj 管理员和后台设置
- 紧固件基础知识之规格篇和功能篇
- 楼梯计算机公式,楼梯踏步数计算公式是什么
- 上海第二工业大学计算机应用技术专业,2019上海第二工业大学专业排名
- 南京大学交叉培养计算机与金融招生人数,教务处组织召开计算机与金融工程实验班师生见面会...
- 台湾大学林轩田机器学习技法课程学习笔记6 -- Support Vector Regression
- 黑马程序员_毕向东_JavaScript视频教程--学习笔记
- BlueStacks不仅支持x86和ARM处理器,新版BlueStacks并不是单纯的实现虚拟化,而是运行整个Android系统
- 1_01李婉玲_数据结构_1012
- php年会总结,2019年终总结(示例代码)
- 个人官网导航网址放旗下网站源码
- 全国计算机化学年会,俞汝勤院士获中国化学会首届计算机化学终身成就奖
- 震惊!全球100强零部件供应商名单中有66家都是QAD客户