📄 yyh.c
字号:
#define QUEUESIZE 100
#define TRUE 1
#define FALSE !TRUE
#define Statu int
#define BitTreeElementType char
#define BTELEMIOFORMAT "%c"
#define ENDFLAG -1
int i=0,j=0;
typedef struct Bittreenode
{
BitTreeElementType data;
struct Bittreenode *lchild;
struct Bittreenode *rchild;
}BinTNode,*BinTree;
typedef BinTree QueueElemtype;
typedef struct
{
QueueElemtype data[QUEUESIZE];
int front;
int rear;
}queue;
void LayerTravelBitTree(BinTree T)
{
queue tq;
QueueElemtype res;
CreateQueue(&tq);
Entry(&tq,T);
while ( Exit(&tq,&res) == TRUE)
{
if (res)
{
VisitData(res->data);
Entry(&tq,res->lchild);
Entry(&tq,res->rchild);
}
}
}
int CreateQueue(queue *q)
{
q->front = -1;
q->rear = -1;
}
int Entry(queue *q, QueueElemtype c)
{
q->rear++;
if (q->rear >= QUEUESIZE)
{
printf("Queue overflow!\n");
exit(0);
}
q->data[q->rear] = c;
return 1;
}
Statu Exit(queue *q, QueueElemtype *returnback)
{
if (q->front == q->rear)
{
return FALSE;
}
q->front++;
*returnback = q->data[q->front];
return TRUE;
}
Statu VisitData(BitTreeElementType data)
{
printf(BTELEMIOFORMAT,data);
//printf("\n");
return TRUE;
}
//构造二叉链表
void CreateBinTree(BinTree *T)
{//构造二叉链表。T是指向根指针的指针,故修改*T就修改了实参(根指针)本身
char ch;
if ((ch=getchar())=='#')
*T=FALSE;
else{//读入非空格
*T=(BinTNode *)malloc(sizeof(BinTNode));
(*T)->data=ch;
i++;
CreateBinTree(&(*T)->lchild);
CreateBinTree(&(*T)->rchild);
}
}
//先序遍历
void Inorder(BinTree T)
{
if(T){
printf("%c",T->data);
Inorder(T->lchild);
Inorder(T->rchild);
}
}
//中序遍历
void Zinorder(BinTree T)
{
if(T){
Zinorder(T->lchild);
printf("%c",T->data);
Zinorder(T->rchild);
}
}
//后序遍历
void Hinorder(BinTree T)
{
if(T){
Hinorder(T->lchild);
Hinorder(T->rchild);
printf("%c",T->data);
}
}
void Yinorder(BinTree T)
{
if(T){
if(T->lchild==FALSE)
if(T->rchild==FALSE)
{j++;
goto aaa;
}
Yinorder(T->lchild);
Yinorder(T->rchild);
}
aaa: printf("_");
}
main()
{ BinTree *p;
CreateBinTree(p);
printf("先序遍历 :");
Inorder(p);
printf("\n");
printf("中序遍历 :");
Zinorder(p);
printf("\n");
printf("后序遍历 :");
Hinorder(p);
printf("\n");
printf("层次遍历 :");
LayerTravelBitTree(p);
printf("\n");
printf("总结点数 :%d\n",i);
Yinorder(p);
printf("\n叶子结点数:%d\n",j);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -