一、二叉树的数据结构
typedef char ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode* lchild;
struct BiTNode* rchild;
}BiTNode, *BiTree;
二、二叉树的建立
先序建立二叉树
输入格式:abc##d##e##’\n’
void CreateBiTree(BiTree *T) {
char c;
scanf("%c", &c);
if (c == '#') {
(*T) = NULL;
return;
}
(*T) = (BiTNode*)malloc(sizeof(BiTNode));
if ((*T) == NULL) {
printf("分配空间失败!\n");
return;
}
(*T)-> data = c;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
return;
}
三、二叉树的遍历
先序遍历
递归实现
void PreOrder(BiTree T) {
if (T == NULL) return;
printf("%c ",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
循环实现
void PreOrder_S(BiTree T) {
if (T != NULL) {
Stack S;
InitStack(&S);
while (T || !IsEmpty(S)) {
while(T) {
printf("%c ", T->data);
Push(&S, T);
T = T->lchild;
}
T = Top(S);
Pop(&S);
T = T->rchild;
}
}
}
中序遍历
递归实现
void InOrder(BiTree T) {
if (T == NULL) return;
InOrder(T->lchild);
printf("%c ",T->data);
InOrder(T->rchild);
}
循环实现
void InOrder_S(BiTree T) {
if (T != NULL) {
Stack S;
InitStack(&S);
while (T || !IsEmpty(S)) {
while(T) {
Push(&S, T);
T = T->lchild;
}
T = Top(S);
Pop(&S);
printf("%c ", T->data);
T = T->rchild;
}
}
}
后序遍历
递归实现
void PostOrder(BiTree T) {
if (T == NULL) return;
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c ",T->data);
}
循环实现
饼
层次遍历
void LevelOrder(BiTree T) {
Queue Q;
InitQueue(&Q);
if (T != NULL)
Push_Q(&Q, T);
BiTNode* n = NULL;
while (!IsEmptyQ(Q)) {
n = Front(Q);
Pop_Q(&Q);
printf("%c ", n->data);
if (n->lchild) Push_Q(&Q, n->lchild);
if (n->rchild) Push_Q(&Q, n->rchild);
}
return ;
}