您的位置:逆风者 数据结构 正文
原作者:www.upwinder.com 添加时间:2007-09-02 原文发表:2007-08-31 人气:170 来源:本站原创

本文章共1563字,分2页,当前第1页,快速翻页:
 

原帖及讨论:http://bbs.bc-cn.net/dispbbs.asp?boardid=179&id=137061

//Bintree.h
#include<stdio.h>
#include<malloc.h>
逆风编程精品
typedef struct Binnode{//二叉树结点结构体
char data;
struct Binnode *lchild;
struct Binnode *rchild;
};
typedef Binnode *Bintree ;

typedef struct stack{ //二叉树结点栈
Bintree data[100];
int flag[100];
int top;
};

typedef struct queue{ //二叉树结点队列
Bintree data[30];
int front;
int rear;
};



/*******************************************/
/*按照前序遍历建立二叉树 */
/*******************************************/

void Creat_Bintree(Bintree *root)
{
char ch;
if((ch=getchar())==' ')
{
*root=NULL;

}
else
{
*root=(Binnode*)malloc(sizeof(Binnode));
(*root)->data=ch;
Creat_Bintree(&(*root)->lchild);
Creat_Bintree(&(*root)->rchild);
}
}

/*******************************************/
/*按照前序递归遍历二叉树 */
/*******************************************/

void Preorder1(Bintree t)
{
if(t!=NULL)
{
printf("%c",t->data);
Preorder1(t->lchild);
Preorder1(t->rchild);
}
}


/*******************************************/
/*按照中序递归遍历二叉树 */
/*******************************************/

void Inorder1(Bintree t)
{
if(t!=NULL)
{
Inorder1(t->lchild);
printf("%c",t->data);
Inorder1(t->rchild);
}
}

/*******************************************/
/*按照后序递归遍历二叉树 */
/*******************************************/

void Posorder1(Bintree t)
{
if(t!=NULL)
{
Posorder1(t->lchild);
Posorder1(t->rchild);
printf("%c",t->data);
}
}
/*******************************************/
/*按照前序非递归遍历二叉树 */
/*******************************************/

void Preorder2(Bintree t)
{
Bintree pre=t;
stack s;
s.top=0;
printf("输出前序遍历序列:");
while(pre||s.top>0)
{
if(pre)
{
printf("%c",pre->data);
s.data[s.top ]=pre;
pre=pre->lchild;
}
else
{
pre=s.data[--s.top]->rchild;
}
}
printf("\n\n");
}

/*******************************************/
/*按照中序非递归遍历二叉树 */
/*******************************************/

void Inorder2(Bintree t)
{
Bintree pre=t;
stack s;
s.top=0;
printf("输出中序遍历序列:");
while(pre||s.top>0)
{
if(pre)
{
s.data[s.top ]=pre;
pre=pre->lchild;
}
else
{
pre=s.data[--s.top];
printf("%c",pre->data);
pre=pre->rchild;
}
}
printf("\n\n");
}

/*******************************************/
/*按照后序非递归遍历二叉树 */
/*******************************************/

void Posorder2(Bintree t)
{
stack s;
s.top=-1;
printf("输出后序遍历序列:");
while(t!=NULL||s.top!=-1)
{
while(t)
{
s.top ;
s.flag[s.top]=0;
s.data[s.top]=t;
t=t->lchild;

}
while(s.top>=0&&s.flag[s.top]==1)
{
t=s.data[s.top];
printf("%c",t->data);
s.top--;
}
if(s.top>=0)
{
t=s.data[s.top];
s.flag[s.top]=1;
t=t->rchild;
}
else
{
t=NULL;
}
}
printf("\n\n");
}


/*******************************************/
/* 按照层次遍历二叉树*/
/*******************************************/
void Levelorder(Bintree t)
{
queue q;
q.data[0]=t;
q.front=0;q.rear=1;
printf("层次遍历二叉树结果:");
while(q.front<q.rear)
{
if(q.data[q.front])
{
printf("%c",q.data[q.front]->data);
q.data[q.rear ]=q.data[q.front]->lchild;
q.data[q.rear ]=q.data[q.front]->rchild;
q.front ;
}
else
{
q.front ;
 

本文章更多内容1 - 2 - 下一页>>
相关文章

数据结构教程 第二课 抽象数据类型的表示与
数据结构教程 第七课 实验一 线性表的顺序存
数据结构教程 第十八课 数组的顺序表示与实
数据结构教程 第三十四课 插入排序,快速排
数据结构教程 第十五课 串的表示和实现
数据结构教程 第八课 线性表的链式表示与实
数据结构教程 第十七课 实验三:栈的表示与
数据结构教程 第三十三课 哈希表(二)
数据结构教程 第一课 数据结构的基本概念和
五子棋算法
数据结构教程 第三十七课 实验八 排序实验
数据结构教程 第二十八课 图的存储结构
数据结构教程 第十一课 栈的应用
数据结构教程 第十二课 实验二 循环链表实验
数据结构教程 第三十八课 文件概念,顺序文
数据结构教程 第二十一课 树、二叉树定义及
数据结构教程 第二十二课 实验五 数组实验
数据结构教程 第六课 线性表的顺序表示和实
数据结构教程 第二十四课 遍历二叉树
数据结构教程 第三十一课 动态查找表

相关评论


本文章所属分类:首页 数据结构

  热门关键字: