贞节牌坊 古典武侠:一个关于二叉树的问题?(C语言版)

来源:百度文库 编辑:高考问答 时间:2024/05/06 13:03:29
编写一个将二叉树中每个结点的左右孩子交换的算法?(用递归)
求各位大哥大姐帮帮小弟的忙啊 我们要叫作业了哦 谢谢了哦 祝你们天天有个好心情!!!!

复制一下即可执行
#include <stdio.h>
#include <stdlib.h>
#define len sizeof(struct elemtype)
struct elemtype
{
char data;
struct elemtype *lchild,*rchild;
};
struct elemtype *createbt() /*先序建立一颗二叉树*/
{
struct elemtype *node; /*使用方法自己研究,可输入例子:ab回车回车c回车回车*/
char ch;
ch=getchar();
if(ch=='\n') node=NULL;
else
{
node=(struct elemtype *)malloc(len);
node->data=ch;
node->lchild=createbt();
node->rchild=createbt();
}
return(node);
}
void output(struct elemtype *node) /*中序输出二叉树*/
{
if(node!=NULL)
{
printf("%c",node->data);
output(node->lchild);
output(node->rchild);
}
}
void change(struct elemtype *bt)
{
struct elemtype *temp;
if(bt==NULL)
return;
temp=bt->lchild;
if(bt->lchild!=NULL)
change(bt->lchild);
if(bt->rchild!=NULL)
change(bt->rchild);
bt->lchild=bt->rchild;
bt->rchild=temp;
return;
}

int main()
{
struct elemtype *bt;
bt=createbt();
output(bt);
printf("\n交换后为:\n");
change(bt);
output(bt);
return 0;
}

chlr(btree *bt)
//二叉树递归左右孩子交换
{
btree *temp;
if (bt.lc) chlr(bt.lc);//对左孩子递归
if (bt.rc) chlr(bt.rc);//对右孩子递归
//交换本结点的,左右孩子皆为空时也交换,此处可优化
temp=bt.lc;
bt.lc=bt.rc;
bt.rc=temp;
}

调用时参数为根结点即可