数据结构课上二叉树的遍历方式
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct BiTNode {
char data;
struct BiTNode* lchild, * rchild;
}BiTNode, *BiTree;
typedef struct queue {
BiTNode* Q[1000];
int front;
int rear;
}Queue;
Queue Q;
void csh() {
Q.front = 0;
Q.rear = 0;
}
void push(BiTNode* T) {
Q.Q[++Q.rear] = T;
}
BiTNode* pop() {
return Q.Q[++Q.front];
}
int empty() {
return Q.rear == Q.front;
}
BiTree CreateBiTree() {
BiTree T;
char c;
scanf("%c", &c);
if ('#' == c) {
T = NULL;
}
else {
T = (BiTree)malloc(sizeof(BiTNode));
T->data = c;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
return T;
}
void visit(char data) {
printf("%c\n", data);
}
youxianxu(BiTree T) {
if (T) {
visit(T->data);
youxianxu(T->rchild);
youxianxu(T->lchild);
}
}
youzhongxu(BiTree T) {
if (T) {
youzhongxu(T->rchild);
visit(T->data);
youzhongxu(T->lchild);
}
}
youhouxu(BiTree T) {
if (T) {
youhouxu(T->rchild);
youhouxu(T->lchild);
visit(T->data);
}
}
zuoxianxu(BiTree T) {
if (T) {
visit(T->data);
zuoxianxu(T->lchild);
zuoxianxu(T->rchild);
}
}
zuozhongxu(BiTree T) {
if (T) {
zuozhongxu(T->lchild);
visit(T->data);
zuozhongxu(T->rchild);
}
}
zuohouxu(BiTree T) {
if (T) {
zuohouxu(T->lchild);
zuohouxu(T->rchild);
visit(T->data);
}
}
void cengce(BiTree T) {
BiTree p=T;
push(T);
while (!empty()) {
p = pop();
printf("%c\n", p->data);
if (p->lchild)
push(p->lchild);
if (p->rchild)
push(p->rchild);
}
}
int main() {
printf("请输入一棵树\n");
BiTree T;
T = CreateBiTree();
int x;
while (1) {
printf("请输入相应功能键实现相应功能\n");
printf("1.左先序遍历结果\n");
printf("2.右先序遍历结果\n");
printf("3.左中序遍历结果\n");
printf("4.右中序遍历结果\n");
printf("5.左后序遍历结果\n");
printf("6.右后序遍历结果\n");
printf("7.层次遍历结果为\n");
printf("0.退出\n");
scanf("%d", &x);
if (x < 0 || x>7) {
printf("您的输入错误,请重新输入\n0-7");
}
switch (x) {
case 1: printf("左先序遍历结果为\n"); zuoxianxu(T); system("pause>nul&&cls"); break;
case 2:printf("右先序遍历结果为\n"); youxianxu(T); system("pause>nul&&cls"); break;
case 3: printf("左中序遍历结果为\n"); zuozhongxu(T); system("pause>nul&&cls"); break;
case 4:printf("右中序遍历结果为\n"); youzhongxu(T); system("pause>nul&&cls"); break;
case 5:printf("左后序遍历结果为\n"); zuohouxu(T); system("pause>nul&&cls"); break;
case 6:printf("右后序遍历结果为\n"); youhouxu(T); system("pause>nul&&cls"); break;
case 7:printf("层次遍历结果为\n"); cengce(T); system("pause>nul&&cls"); break;
case 0:return 0;
}
}
return 0;
}