Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4889
  • 博文数量: 5
  • 博客积分: 160
  • 博客等级: 入伍新兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-03 18:16
文章分类

全部博文(5)

文章存档

2011年(1)

2010年(4)

我的朋友
最近访客

分类: C/C++

2010-03-25 11:38:20

#include <stdio.h>
#include <stdlib.h>

#define MAXSTACK 20

typedef char elemtype;
typedef struct btnode
{
  elemtype data;
  struct btnode *lchild,*rchild;
} bitnode,*bitree;

// 创建二叉树

int creatbitree(bitree *t, int level)
{
  char ch;
  printf(">");
  scanf("%c",&ch);
  getchar();
  if(ch=='#')
  {
     (*t)=NULL;
     return 0;
  }
  else
  {
     (*t)=(bitnode*)malloc(sizeof(bitnode));
     (*t)->data=ch;
     printf("enter %d left child\n",level);
     creatbitree1(&(*t)->lchild,level+1);
     printf("enter %d right child\n",level);
     creatbitree1(&(*t)->rchild,level+1);
  }
  return 0;
}

// 非递归前序遍历二叉树

void preorder(bitree p)
{
   bitree stack[MAXSTACK];
   int top = 0;
   
   while(p!=NULL||top!=0)
   {
      if(p!=NULL)
      {
         printf("%c\n",p->data);
         stack[top++]=p;
         p=p->lchild; //遍历左子树

      }
      else
      {
          p=stack[--top];
          p=p->rchild; //遍历右子树

      }
   }
}

// 非递归中序遍历二叉树

void midorder(bitree t)
{
  bitree tmp = NULL;
  // 保存节点的栈

  bitree stack[MAXSTACK];
  int top = 0;
  
  memset(stack, 0x00, sizeof(stack));

  tmp = t;

  while((tmp != NULL) || (top > 0))
  {
     if (tmp != NULL)
     {
        stack[top++] = tmp;
        tmp = tmp->lchild;
     }
     else
     {
        tmp = stack[--top];
        printf("%c\n", tmp->data);
        tmp = tmp->rchild;
     }
  }
}

int main(int argc, char *argv[])
{
  bitree t;//=creatbitree();

  creatbitree1(&t,0);
  
  printf("++++++++++++++++++++\n");
  midorder(t);
  preorder(t);
  
  return 0;
}


阅读(306) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:查找二叉树的建立

给主人留下些什么吧!~~