本题代码如下
void swap(tree* t)
{
if (*t)
{
treenode* temp = (*t)->lchild;
(*t)->lchild = (*t)->rchild;
(*t)->rchild = temp;
swap(&(*t)->lchild);
swap(&(*t)->rchild);
}
}
完整测试代码
#include<stdio.h>
#include<stdlib.h>
typedef struct treenode
{
char data;
struct treenode* lchild, * rchild;
}treenode,*tree;
void buildtree(tree* t)
{
char ch;
ch = getchar();
if (ch =='#')
*t = NULL;
else
{
*t = (treenode*)malloc(sizeof(treenode));
(*t)->data = ch;
buildtree(&((*t)->lchild));
buildtree(&((*t)->rchild));
}
}
void swap(tree* t)
{
if (*t)
{
treenode* temp = (*t)->lchild;
(*t)->lchild = (*t)->rchild;
(*t)->rchild = temp;
swap(&(*t)->lchild);
swap(&(*t)->rchild);
}
}
void disp(tree* t)
{
if (*t)
{
printf("%c", (*t)->data);
disp(&(*t)->lchild);
disp(&(*t)->rchild);
}
}
int main()
{
tree t;
buildtree(&t);
printf("交换过后的二叉树为(前序序列):");
swap(&t);
disp(&t);
return 0;
}
用ABD##E##CF##G##测试