2023.10.31

交换二叉树每个结点的左孩子和右孩子

#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode
{
char data;//结点的值,char类型
struct BiTNode *lchild;//左孩子结点
struct BiTNode *rchild;//右孩子结点
}BiTNode,*BiTree;//*BiTree是结构体指针
//中序遍历输出 (左->根->右)
void zhongxu(BiTree T)
{
if(T!=NULL)
{
zhongxu(T->lchild);
printf("%c",T->data);
zhongxu(T->rchild);
}
}
//目的是交换结点
void swap(BiTree T)
{
if(T!=NULL)
{
BiTNode *m=T->lchild;/*这三行类似于"打擂台法"*/
T->lchild=T->rchild;
T->rchild=m;
swap(T->lchild);
swap(T->rchild);
}
}
void creat(BiTree *T) //创建二叉树
{
char ch;
scanf("%c",&ch);
if(ch=='#') //判断该字符ch是不是为'#',意思是该节点是不是空的
*T=NULL;
else
{
*T=(BiTree)malloc(sizeof(BiTNode)); //为结点T申请空间
(*T)->data=ch; //将ch的值赋给(*T)->data
creat(&(*T)->lchild);
creat(&(*T)->rchild);
}
}
int main()
{
BiTree T; //定义BiTree类型T
creat(&T);
zhongxu(T);
swap(T);
printf("\n");//换行,以免格式错误
zhongxu(T);
return 0;
}

posted @ 2023-10-31 16:55  我也不想的  阅读(8)  评论(0)    收藏  举报