| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 787 人关注过本帖
标题:非递归中序遍利 二叉数在C下实现
只看楼主 加入收藏
qxyaizzc
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-11-21
收藏
 问题点数:0 回复次数:1 
非递归中序遍利 二叉数在C下实现
#define   Stack_Init_Size   100   
  #include   <stdio.h>   
  #include   <malloc.h>   
  #include   <conio.h>   
  #include   <stdlib.h>   
   
  typedef   struct   Node   
  {       char   data;   
          struct   Node   *LChild;   
          struct   Node   *RChild;   
  }BiTNode,   *BiTree;   
   
  typedef   struct   
  {   
          BiTree   base,top;   /*base=*top表示空栈*/   
          int   stacksize;               /*用来存放栈长*/   
  }SqStack;   
   
  const   int   LEN=sizeof(BiTNode);   
  int   sign=1;   
   
  void   InitStack(SqStack   *S)   
  {   
          /*构造一个空栈S*/   
          S->top=S->base=(BiTree)malloc(Stack_Init_Size*LEN);   
          if(!S->base)exit(1);   
          S->stacksize=Stack_Init_Size;   
  }   
   
  void   MyEQU(BiTree   opa,BiTree   opb)   
  {   
          opa->data=opb->data;   
          opa->LChild=opb->LChild;   
          opa->RChild=opb->RChild;   
  }   
  /*判栈空*/   
  int   StackEmpty(SqStack   S)   /*判断栈S为空栈时返回值为0,反之为1*/   
  {   
          return   S.base==S.top;   
  }   
   
  int   Push(SqStack   *S,BiTree   x)   
  {   
          if(S->top-S->base>=S->stacksize)return   0;     /*栈已满*/   
          MyEQU(S->top,x);   
          printf("%c",S->top->data);   
          S->top++;   
          return   1;   
  }   
   
  int   Pop(SqStack   *S,BiTree   *x)   
  {   
          /*   将栈S的栈顶元素弹出,放到x所指的存储空间中   */   
          if(S->top==S->base)return   0;     /*栈为空*/   
          else   
          {   
                  S->top--;   
                  *x=S->top;   
                  return   1;   
          }   
  }   
   
  void   CreateBiTree(BiTree   *bt)   
  {   
          char   ch;   
          if(!sign)return;   
          ch=getchar();   
          fflush(stdin);   
          if(ch=='$')*bt=0,sign=0;
          else   
          {   
                  *bt=(BiTree)malloc(LEN);   /*生成一个新结点*/   
  (*bt)->LChild=(*bt)->RChild=NULL;   
                  (*bt)->data=ch;   
                  CreateBiTree(&((*bt)->LChild));   /*生成左子树*/   
                  CreateBiTree(&((*bt)->RChild));   /*生成右子树*/   
          }   
  }   
   
  int     main()   /*   中序遍历二叉树的非递归算法6.3   */   
  {   
          BiTree   root;   
          SqStack   S;   
          BiTree   p;   
   
          CreateBiTree(&root);   
          InitStack   (&S);   
          p=root;   
          while(p||!StackEmpty(S))   
          {   
                  if   (p)     /*   根指针进栈,遍历最左   */   
                  {   
                          Push(&S,p);   
                          p=p->LChild;   
                  }   
                  else   
                  {     /*根指针退栈,访问根结点,遍历右子树*/   
                          Pop(&S,&p);   
                          printf("this   node   is:   %c\n",p->data);   
                          p=p->RChild;   
                  }   
          }   
          getch();   
          return   0;   
  }
如和改才能在C下出现正确结果呢
搜索更多相关主题的帖子: 递归 
2007-11-22 19:35
米车阿里
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-10-19
收藏
得分:0 
把引用改成指针就行了吧

天意总有礼物和失落,我享受生命的每个阶段
2007-11-22 20:31
快速回复:非递归中序遍利 二叉数在C下实现
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026611 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved