⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yyh.c

📁 对二叉树的生存,二叉树遍历等,有前序的,中序的,后序的,层次的,求结点数的等.
💻 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 + -