最简单的二叉树建立与遍历
来源:互联网 发布:数据展示工具 编辑:程序博客网 时间:2024/05/16 01:49
/*先序建立二叉树,中序、后序、层序遍历二叉树*/
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild; /*左右孩子指针*/
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T){
char ch; /*定义字符变量*/
scanf("%c",&ch);
if (ch==' ') (*T)=NULL; /* 空格代表空指针*/
else {
*T=(BiTree) malloc(sizeof(BiTNode));/*申请结点 */
if(!*T)
exit(0);
(*T)->data=ch; /*生成根结点 */
CreateBiTree(&(*T)->lchild) ; /*构造左子树 */
CreateBiTree(&(*T)->rchild) ; /*构造右子树 */
}
}
/*中序遍历*/
void InOrder(BiTree T){
if(T){
InOrder(T->lchild); /*中遍历左子树*/
printf("%2c",T->data); /*访问根结点,此处简化为输出根结点的数据值*/
InOrder(T->rchild); /*中序遍历右子树*/
}
}
/*后序遍历*/
void PostOrder(BiTree T){
if(T){
PostOrder(T->lchild); /*后序遍历左子树*/
PostOrder(T->rchild); /*后序遍历右子树*/
printf("%2c",T->data); /*访问根结点,此处简化为输出根结点的数据值*/
}
}
/*层次遍历*/
void LevelOrder(BiTree T){
/*层次遍历二叉树T,从第一层开始,每层从左到右*/
BiTree Queue[MAX],b; /*用一维数组表示队列,front和rear分别表示队首和队尾指针*/
int front,rear;
front=rear=0;
if (T) /*若树非空*/
{
Queue[rear++]=T; /*根结点入队列*/
while (front!=rear){ /*当队列非空*/
b=Queue[front++]; /*队首元素出队列,并访问这个结点*/
printf("%2c",b->data);
if (b->lchild!=NULL) Queue[rear++]=b->lchild; /*左子树非空,则入队列*/
if (b->rchild!=NULL) Queue[rear++]=b->rchild; /*右子树非空,则入队列*/
}
}
}
/*主函数*/
main(){
BiTree T=NULL;
printf("/nCreate a Binary Tree/n");
CreateBiTree(&T); /*建立一棵二叉树T*/
printf("/nThe inorder is:/n");
InOrder(T); /*中序遍历*/
printf("/nThe postorder is:/n");
PostOrder(T); /*后序遍历*/
printf("/nThe level order is:/n");
LevelOrder(T); /*层次遍历*/
}
希望大家不要吝啬自己的建议,使我能够不断改进!
- 最简单的二叉树建立与遍历
- 简单二叉树的建立和遍历
- 二叉树的建立与遍历
- c++二叉树的建立与遍历
- 二叉树的建立与先序中序后序遍历
- C++二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的遍历与建立
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 数据结构 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立 与 遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 使用SQL语句求排名
- Windows Mobile下获取cab包安装目录
- Eclipse下的js和ext开发
- Windows Mobile下如何拦截短信
- EXT简介
- 最简单的二叉树建立与遍历
- Windows Mobile下如何拦截电话
- product出现错误解决
- 三天三夜——拯救生命的那些感人的瞬间
- 关于identity列的插入问题
- ANT使用
- yui-ext基础入门(1)
- yui-ext基础入门(2)
- 台各界向灾区伸出援手:地震让我们走得更近