设计一个镜面影射算法,将一个二叉树的每个节点的左,右子结点交换位置

#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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值