使用递归进行,设这个函数为F(x)
1.当X为NULL,F(x) return NULL
2.当X!=NULL,F(x):申请一个新节点t,然后用F(x)分别处理他的左右孩子,处理后的结果用t1,t2返回,即t1=F(t->Rchild),t2=(t->Lchild),再交换处理过后的左右孩子,即t->Lchild=t1,t->Rchild=t2. 然后返回t。
-----------------------------------------------------------------------------------------------------
btree* swap(btree bt)
{
btree *t,*t1,*t2; //定义指针
if(bt==NULL) return NULL; //1.如果代入的节点是个空节点,就返回空
else //2.如果代入的节点不是空节点,就做下面的操作
{
t=(btree*)malloc(sizeof(btree));
t->data=bt->data; //申请一个新节点来存放交换后的树
t1=swap(t->Lchild); //处理这个节点的左子树和右子树
t2=swap(t->Rchild);
t->Lchild=t2; //交换处理后的左右树
t->Rchild=t1;
return t; //用t返回处理的结果
}
}
这是个递归过程,楼主可以把它理解成一个函数,这个函数代入的值不同时,返回的结果也不同。