#include<stdio.h> |
#include<stdlib.h> |
//二叉树结点 |
typedef struct Bitnode{ |
char data; |
struct Bitnode *lchild,*rchild; |
}*Bitree; |
//链表结点 |
typedef struct Node{ |
char data; |
int lchild; |
int rchild; |
}node; |
node Array[100]; |
static int length=0; |
const int MaxLength=100; |
//创建二叉树 |
void CreateBitree(Bitree &t) |
{ |
char ch; |
scanf ( "%c" ,&ch); |
if (ch== '#' ) |
t=NULL; |
else |
{ |
t=(Bitnode *) malloc ( sizeof (Bitnode)); |
t->data=ch; |
CreateBitree(t->lchild); |
CreateBitree(t->rchild); |
} |
} |
//前序遍历 |
void inordertraverse(Bitree t) |
{ |
if (t) |
{ |
printf ( "%c" ,t->data); |
length++; |
Array[length].data=t->data; |
inordertraverse(t->lchild); |
inordertraverse(t->rchild); |
} |
} |
//后序遍历 |
void postordertraverse(Bitree t) |
{ |
if (t) |
{ |
inordertraverse(t->lchild); |
inordertraverse(t->rchild); |
printf ( "%c" ,t->data); |
} |
} |
//层次遍历 |
void Leveltaverse(Bitree t) |
{ |
Bitree Q[MaxLength]; |
int front=0,rear=0; |
Bitree p; |
if (t){ |
Q[rear]=t; |
rear=(rear+1)%MaxLength; |
} |
while (front!=rear){ |
p=Q[front]; |
front=(front+1)%MaxLength; |
printf ( "%c" ,p->data); |
if (p->lchild){ |
Q[rear]=p->lchild; |
rear=(rear+1)%MaxLength; |
} |
if (p->rchild){ |
Q[rear]=p->rchild; |
rear=(rear+1)%MaxLength; |
} |
} |
} |
//二叉树链表 |
void Bitreelist(Bitree t) |
{ |
int i,j; |
if (t) |
{ |
j=1; |
while (t->data!=Array[j].data) |
j++; |
if (t->lchild!=NULL) |
{ |
i=1; |
while (t->lchild->data!=Array[i].data) |
i++; |
Array[j].lchild=i; |
} |
else |
Array[j].lchild=0; |
if (t->rchild!=NULL) |
{ |
i=1; |
while (t->rchild->data!=Array[i].data) |
i++; |
Array[j].rchild=i; |
} |
else |
Array[j].rchild=0; |
Bitreelist(t->lchild); |
Bitreelist(t->rchild); |
} |
} |
int main() |
{ |
Bitree t1; |
printf ( "请输入二叉树结点值:" ); |
CreateBitree(t1); |
printf ( "\n" ); |
printf ( "二叉树先序遍历:" ); |
inordertraverse(t1); |
printf ( "\n" ); |
printf ( "二叉树后序遍历:" ); |
postordertraverse(t1); |
printf ( "\n" ); |
printf ( "二叉树层次遍历:" ); |
Leveltaverse(t1); |
printf ( "\n" ); |
printf ( "\n" ); |
Bitreelist(t1); |
printf ( "二叉树的静态二叉链表为:\n" ); |
printf ( "下标\tlchil\tdata\trchild\n" ); |
for ( int j=1;j<=length;j++) |
{ |
printf ( "%d\t%d\t%c\t%d\n" , j,Array[j].lchild, Array[j].data, Array[j].rchild); |
} |
return 0; |
} |
//ABD##E##CFH###G## |
初级程序员
by: 云代码会员 发表于:2017-09-15 11:33:08 顶(0) | 踩(0) 回复
有没有专门讲解的来说说这个怎么理解
回复评论