#define OK 1
#define ERROR 0
#include<stdio.h>
#include<stdlib.h>
typedef char TElemType;
typedef int Status;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
void CreateBiTree(BiTree * T) //二叉树的建立
{
TElemType ch;
scanf("%c",&ch);
if(ch=='#')
{
*T=NULL;
}
else
{
*T=(BiTree)malloc(sizeof(BiTNode));
}
if(!*T)
{
return ;
}
else
{
(*T)->data=ch;
CreateBiTree(&(*T)->lchild); //构造左子树
CreateBiTree(&(*T)->rchild); //构造右子树
}
}
void PreQrderTraverse(BiTree * T) //前序遍历
{
if(*T==NULL)
{
return ;
}
printf("%c ",(*T)->data);
PreQrderTraverse(&(*T)->lchild); //先序先遍历左子树
PreQrderTraverse(&(*T)->rchild); //然后在遍历右子树
}
void swap(BiTree * T1,BiTree * T2)
{
BiTree temp;
temp=(*T1);
(*T1)=(*T2);
(*T2)=temp;
}
//设计一个镜面影射算法,将一个二叉树的每个节点的左,右子结点交换位置
void BiTree_change_left_right(BiTree * T) {
if (*T)
{
BiTree_change_left_right(&(*T)->lchild);
BiTree_change_left_right(&(*T)->rchild);
swap(&(*T)->lchild,&(*T)->rchild);
}
}
int main()
{
BiTree T;
printf("创建二叉树:\n");
CreateBiTree(&T);
printf("前序遍历的结果为: ");
PreQrderTraverse(&T);
printf("\n镜面影射后:\n");
BiTree_change_left_right(&T);
printf("前序遍历的结果为:");
PreQrderTraverse(&T);
}
设计一个镜面影射算法,将一个二叉树的每个节点的左,右子结点交换位置
最新推荐文章于 2022-10-29 11:56:44 发布