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

递归实现,直接放代码,有兴趣的可以看我后面的详细解析!

//将树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.图解递归(简单二叉树)
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值