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

#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); }

你可能感兴趣的:(二叉树,镜面影射)