递归实现,直接放代码,有兴趣的可以看我后面的详细解析!
//将树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.图解递归(简单二叉树)