Chinaunix首页 | 论坛 | 博客
  • 博客访问: 327893
  • 博文数量: 243
  • 博客积分: 86
  • 博客等级: 民兵
  • 技术积分: 1045
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-09 17:03
个人简介

稳重,成熟

文章分类

全部博文(243)

文章存档

2015年(2)

2013年(72)

2012年(169)

我的朋友

分类: C/C++

2013-03-19 21:04:47

原文地址:二叉树遍历(纯C) 作者:教鱼斿泳

中序遍历 左根右
先序遍历 根左右
后序遍历 左右根
顺序是以根的位置来命名的,中,根在中间,先,根在前面。
 
#include
#include
struct tree
{
 int data;
 struct tree* lchild,*rchild;  
};
struct tree* create(int *nodelist, int position)
{
 struct tree* newnode;
 if(nodelist[position]==0||position>15)
 return NULL;
  else
  {
  newnode = (struct tree*) malloc(sizeof(struct tree));
  newnode->data=nodelist[position];
  newnode->lchild=create(nodelist,2*position);
  newnode->rchild=create(nodelist,2*position+1);
 return newnode;
 }
}
void preorder(struct tree *p)
{
  if(p!=NULL)
  {
   printf("%d\n",p->data);
   preorder(p->lchild);
   preorder(p->rchild);  
  }
}
void inorder(struct tree *p)
{
 if(p!=NULL)
 {
  inorder(p->lchild);
  printf("%d\n",p->data);
  inorder(p->rchild); 
 } 
}
void fallorder(struct tree *p)
{
 if(p!=NULL)
 {
  fallorder(p->lchild);
  fallorder(p->rchild);
  printf("%d\n",p->data);  
 } 
}
int main()
{
 struct tree* root = NULL;       
  int nodelist[16] = {0,5,2,9,1,4,7,0,0,0,3,0,6,8,0,0};
  root = create(nodelist, 1);
 printf("create successful\n");
 preorder(root); 
 printf("finish preorder\n");
 inorder(root);
 printf("finish inorder\n");
 fallorder(root);
 printf("finish fallorder\n");
}
阅读(379) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~