#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include<math.h>
typedef struct BiTNode {
char date;
struct BiTNode* lchild, * rchild;
}BiTNode,*BiTree;
typedef struct node{
BiTNode *Bi;
struct node* next;
}node;
typedef struct {
node* front, * rear;
}LinkQueue;
void print(BiTree T);
void preTravel(BiTree root);
void inOrderTravel(BiTree root);
void create(BiTree& T,char ch[100]);
void printMenu();
int depth(BiTree& T);
int allCount(BiTree& T);
void postTravel(BiTree root);
void floorTravel(BiTree& T, LinkQueue& Q);
void floorTravel(BiTree& T,LinkQueue &Q) {
if (T) {
node* p = new node;
p->next = NULL;
p->Bi = T;
Q.rear->next = p;
Q.rear = p;
}
node* p = Q.rear;
while (Q.front->next) {
printf("%c", Q.front->next->Bi->date);
if(p->Bi->lchild) {
node* q = new node;
q->next=NULL;
q->Bi = p->Bi->lchild;
Q.rear->next = q;
Q.rear = q;
}
if (p->Bi->rchild) {
node* q = new node;
q->next=NULL;
q->Bi = p->Bi->rchild;
Q.rear->next = q;
Q.rear = q;
}
p = p->next;
Q.front->next = Q.front->next->next;
}
}
int allCount(BiTree& T) {
if (T == NULL)
return 0;
else
return allCount(T->lchild) + allCount(T->rchild) + 1;
}
int depth(BiTree& T) {
int ldep;
int rdep;
if (T == NULL)
return 0;
else
{
ldep = depth(T->lchild);
rdep = depth(T->rchild);
if (ldep > rdep)
return ldep + 1;
return
rdep + 1;
}
}
void create(BiTree& T, char ch[100]) {
static int i = -1;
i++;
if (ch[i] == '#')
T = NULL;
else if (ch[i] != '\0')
{
T = new BiTNode;
if (T == NULL)
exit(-1);
T->date = ch[i];
create(T->lchild, ch);
create(T->rchild, ch);
}
}
void preTravel(BiTree root) {
if (root != NULL) {
printf("%c", root->date);
preTravel(root->lchild);
preTravel(root->rchild);
}
}
void inOrderTravel(BiTree root) {
if (root != NULL) {
inOrderTravel(root->lchild);
printf("%c", root->date);
inOrderTravel(root->rchild);
}
}
void postTravel(BiTree root) {
if (root != NULL) {
postTravel(root->lchild);
postTravel(root->rchild);
printf("%c", root->date);
}
}
void printMenu() {
printf("*******************************************************\n");
printf("*********[1]创建二叉树 ------ [2]先中后遍历************\n");
printf("*********[3]二叉树深度 ------ [4]所有结点数************\n");
printf("**********************[5]退出**************************\n");
printf("********************请输入选择菜单*********************\n");
}
int main(void) {
LinkQueue Q;
Q.front = new node;
Q.rear = Q.front;
BiTree T = NULL;
bool loop = true;
while (loop) {
int node = 0;
int deep = 0;
printMenu();
int menu = 0;
scanf("%d", &menu);
switch (menu) {
case 1:char ch[100]; printf("== 请按顺序输入要创建的二叉树树序列:\n");
scanf("%s", ch); create(T, ch); printf("== 二叉树创建完成==\n"); break;
case 2:printf("<<<先序遍历>>>\n"); preTravel(T); printf("\n");
printf("<<<中序遍历>>>\n"); inOrderTravel(T); printf("\n");
printf("<<<后序遍历>>>\n"); postTravel(T); printf("\n");
printf("<<<层序遍历>>>\n"); floorTravel(T, Q); printf("\n"); break;
case 3:;deep = depth(T); printf("== 深度为<< %d >> ==\n", deep); break;
case 4:;node = allCount(T); printf("==所有节点数为<< %d >>==\n", node); break;
case 5:loop = false; break;
default:printf("=== 请从1---5 输入:==\n"); break;
}
}
}
男女搭配----C语言数据结构
最新推荐文章于 2023-12-01 14:15:00 发布