树的镜像(反转)

#include <stdio.h>


 typedef struct BCTreeNode //
       {
           int                 Value; //
           struct BCTreeNode  *left_child;  //
           struct BCTreeNode  *right_brother; //
       } *BCTree,BcTree;


 int ReverseBCTree(BCTree T){


       	if(T==NULL)
       		return 0;
       	if(T->left_child==NULL)      //no child,go to brother node
       	{
       		ReverseBCTree(T->right_brother);
       		return 0;
       	}
       	BCTree pr,prnext,prprev;
       	pr=T->left_child;            //head of list
       	prprev=NULL;
       	prnext=pr->right_brother;
       	while(prnext){                //reverse all the right_brother list
       		pr->right_brother=prprev;  //reverse current node to prev list node
       		//forward one step
       		prprev=pr;
       		pr=prnext;
       		prnext=prnext->right_brother;
       	}
       	pr->right_brother=prprev;
       	T->left_child=pr;    //after reverse T ->left point to head of list ;
       	ReverseBCTree(T->left_child);
       	ReverseBCTree(T->right_brother);
       	return 0;
 }


int createBCTree(BCTree *T){
       	int data=0;
       	BCTree t;
       	printf("input:");
       	scanf("%d",&data);
       	if(data==100){
       		t=0;
       		return 0;
       	}
       	t=(BCTree)malloc(sizeof(struct BCTreeNode));
       	t->Value=data;
       	t->left_child=NULL;
       	t->right_brother=NULL;
       	*T=t;
       	createBCTree(&(t->left_child));
       	createBCTree(&(t->right_brother));
       	return 0;
  }


int  printBCTree(BCTree T){
       	if(T==0)
       		return 0;
       	printf("output:");
       	printf(" %d ",T->Value);
       	printBCTree(T->left_child);
       	printBCTree(T->right_brother);
       	return 0;
  }


int main(int argc, char *argv[]) {
       	BCTree T=0;
       	if(createBCTree(&T)){
       		printf("error");
       	}
       	printf("createBCTree over\n");
       	printBCTree(T);
       	printf("\nprintBCTree over\n");
       	ReverseBCTree(T);
     	printf("\nReverseBCTreeover\n");
       	printBCTree(T);
       	printf("\nprintBCTree over\n");
       	return 0;
 }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值