树
树是由一个或多个结点组成的有限集合,其中:
(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;
}
#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);
#endif
#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);
#endif
bitree.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;
}
#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;
}