树
树是由一个或多个结点组成的有限集合,其中:
(1)必有一个特定的称为根(ROOT)的结点;
(2)剩下的结点被分成n>=0个互不相交的集合T1、T2、......Tn,而且, 这些集合的每一个又都是树。树T1、T2、......Tn被称作根的子树(Subtree)。
树的递归定义如下:
(1)至少有一个结点(称为根)
(2)其它是互不相交的子树
二叉树
二叉树也是递归定义的,其结点有左右子树之分。
BiTreeMain.c
#include <stdio.h>
#include "bitree.h"

/**//*简单示例
*输入:"abc##de#g##f###"
*/
int main(int argc, char **argv)
...{
BiTree t;
CreateBiTree(&t);
printf("CreateBiTree Succeed! ");
printf("PreOrder:");
PreOrderTraverse(t);
printf(" InOrder:");
InOrderTraverse(t);
printf(" PostOrder:");
PostOrderTraverse(t);
printf(" ");
return 0;
}bitree.h
#ifndef _BITREE_H
#define _BITREE_H
typedef char ElemType;
typedef struct BiTNode...{
ElemType data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode, *BiTree;
int CreateBiTree(BiTree *t);
int PreOrderTraverse(BiTree t);
int InOrderTraverse(BiTree t);
int PostOrderTraverse(BiTree t);
int LevelOrderTraverse(BiTree t);
#endifbitree.c
#include <stdio.h>
#include <stdlib.h>
#include "bitree.h"
int CreateBiTree(BiTree *t)
...{
ElemType elem;
scanf("%c", &elem);
if(elem == '#')
...{
*t = NULL;
}
else
...{
if(!((*t) = (BiTree)malloc(sizeof(BiTNode))))
exit(1);
(*t)->data = elem;
printf("CreateBiTree succeed at %c ", elem);
CreateBiTree(&((*t)->lchild));
CreateBiTree(&((*t)->rchild));
}
return 1;
}
int PreOrderTraverse(BiTree t)
...{
if(t != NULL)
...{
printf("_%c_", t->data);
PreOrderTraverse(t->lchild);
PreOrderTraverse(t->rchild);
}
return 1;
}
int InOrderTraverse(BiTree t)
...{
if(t != NULL)
...{
PreOrderTraverse(t->lchild);
printf("_%c_", t->data);
PreOrderTraverse(t->rchild);
}
return 1;
}
int PostOrderTraverse(BiTree t)
...{
if(t != NULL)
...{
PreOrderTraverse(t->lchild);
PreOrderTraverse(t->rchild);
printf("_%c_", t->data);
}
return 1;
}
本文介绍了一种使用C语言实现二叉树的方法,包括二叉树的创建过程及前序、中序和后序遍历算法。通过示例字符串创建二叉树并展示不同遍历方式的结果。
3249

被折叠的 条评论
为什么被折叠?



