第就章第21题(赶出来的作业) POWERBY KTL

原创 2006年05月30日 22:33:00

//第九章第21题,交换左右子树;
//输入参考书本p194,图9-8,输入为ABCDEFG@@@@L@@@#;中序遍历结果应该为DBEALFCG;
//交换左右子树后进行中序遍历的结果应为:GCFLAEBD;
//可以用别的二叉树进行验证;若程序出错的话可能是没有设置好maxsize的值;
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#define maxsize 15  //若二叉树深度为n,则设置为2^n-1;

typedef char datatype;

typedef struct node
{
 datatype data;
 struct node *lchild,*rchild;
}bitree;

bitree *root;

bitree * CreatTree(void)
{
 char ch;
 bitree * Q[maxsize];
 int front,rear;
 bitree *root,*s;
 root=NULL;
 front=1;
 rear=0;
 printf("请输入字符构造二叉树,#结束,@表示虚结点./n");
 while((ch=getche())!='#')
 {
  s=NULL;
  if(ch!='@')
  {
   s=(bitree*)malloc(sizeof(bitree));
   s->data=ch;
   s->lchild=NULL;
   s->rchild=NULL;
  }
  rear++;
  Q[rear]=s;
  if(rear==1)
   root=s;
  else
  {
   if(s&&Q[front])
    if(rear%2==0)
     Q[front]->lchild=s;
    else
     Q[front]->rchild=s;
    if(rear%2==1)
     front++;
  }
 }
 printf("创建二叉树完成.../n");
 return root;
}

bitree* Exchange(bitree * p)  //该算法的主要思想是把递归函数看成一个黑盒,作用是
{         //遍历,参考中序遍历函数,只要把printf的函数替换为
 bitree *temp;     //交换的函数即可;

 if(p!=NULL)
 {
  temp=p->lchild;
  p->lchild=p->rchild;
  p->rchild=temp;
  Exchange(p->lchild);
  Exchange(p->rchild);
 } 
 return p;
}

void inorder(bitree *p)
{
 if(p!=NULL)
 {
  inorder(p->lchild);
  printf("%c",p->data);
  inorder(p->rchild);
 }
 return;
}

int main()
{
 root=CreatTree();
 printf("交换前的二叉树进行中序排列/n");
 inorder(root);
 root=Exchange(root);
 printf("交换后的二叉树进行中序排列/n");
 inorder(root);
 printf("程序结束.../n");
 return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

leetcode第21题——*Merge Two Sorted Lists

题目 Merge two sorted linked lists and return it as a new list. The new list should be made by splicin...

永久勘误:微软等面试100题答案V0.3版[第21-40题答案]

微软等面试100题答案V0.3版第21-40题部分答案精选   作者:July 、何海涛等网友 ------------------------------------- 开诚布公...

永久勘误:微软等面试100题答案V0.3版[第21-40题答案]

微软等面试100题答案V0.3版第21-40题部分答案精选   作者:July 、何海涛等网友 ------------------------------------- 开诚布公...

第21题:求1~n序列中等于m的所有组合

欢迎转载,转载请务必注明出处:http://blog.csdn.net/alading2009/article/details/46582559 github:https://github.com/...

洛谷1603 斯诺登的密码(第21题)

题目(1)找出句子中所有用英文表示的数字(≤20),列举在下:正规:one two three four five six seven eight nine ten eleven twelve thi...

永久勘误:微软等面试100题答案V0.3版[第21-40题答案]

微软等面试100题系列,答案V0.3版部分答案精选[第21-40题]作者:July 网友-------------------------------------开诚布公,接受读者质检本文,是根据我之...

数据结构和算法经典100题-第21题

题目要求: 给定数组arr,arr[i] == k代表可以从位置i向右跳1~k个距离,比如,arr[2] == 3,代表从位置2可以跳到位置3、位置4或位置5,如果从位置0出发,返回最少跳几次能跳到...

微软等面试100题答案V0.3版[第21-40题答案]

转自:v_JULY_v 第21题 2010年中兴面试题 编程求解: 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)