1 #include <bits/stdc++.h>
2 using namespace std;
3 typedef struct BTNode { //链式存储结构
4 char data;
5 struct BTNode *lchild;
6 struct BTNode *rchild;
7 };
8 void preorder(BTNode *p) {//递归先序遍历
9 if(*p!=NULL) {
10 visit(p);
11 if(p->lchild!=NULL)
12 preorder(p->lchild);
13 if(p->rchild!=NULL)
14 preorder(p->rchild);
15 }
16 }
17 void inorder(BTNode *p) {//递归中序遍历
18 if(*p!=NULL) {
19 if(p->lchild!=NULL)
20 inorder(p->lchild);
21 visit(p);
22 if(p->rchild!=NULL)
23 inorder(p->rchild);
24 }
25 }
26 void postorder(BTNode *p) {//递归后序遍历
27 if(*p!=NULL) {
28 if(p->lchild!=NULL)
29 postorder(p->lchild);
30 if(p->rchild!=NULL)
31 postorder(p->rchild);
32 visit(p);
33 }
34 }
35 void level(BTNode *p) { //层序遍历
36 if(p!=NULL) {
37 int front=0,rear=0;
38 BTNode *que[MAXN];
39 BTNode *q;
40 rear=(rear+1)%maxsize;
41 que[rear]=p;
42 while(rear!=front) {
43 front =(front+1)%maxsize;
44 q=que[front];
45 visit(q);
46 if(q->lchild!=NULL) {
47 rear=(rear+1)%maxsize;
48 que[rear]=p->lchild;
49 }
50 if(q->rchild!=NULL) {
51 rear=(rear+1)%maxsize;
52 que[rear]=p->rchild;
53 }
54 }
55 }
56 }
57 void preorder(BTNode *bt) {//非递归先序遍历
58 if(bt!=NULL) {
59 BTNode *stack[maxsize];
60 BTNode *q;
61 int top=-1;
62 stack[++top]=bt;
63 while(top!=-1) {
64 q=stack[top];
65 visit[q];
66 top--;
67 if(q->rchild!=NULL) {
68 stack[++top]=bt->rchild;
69 }
70 if(q->lchild!=NULL) {
71 stack[++top]=bt->lchild;
72 }
73 }
74 }
75 }
76 void inorder(BTNode *bt) {//非递归中序遍历
77 if(bt!=NULL) {
78 BTNode *stack[maxsize];
79 BTNode *p;
80 p=bt;
81 int top=-1;
82 while(top!=-1||p!=NULL) {
83 while(p!=NULL) {
84 stack[++top]=p;
85 p=p->lchild;
86 }
87 if(top!=-1) {
88 p=stack[top--];
89 visit(p);
90 p=p->rchild;
91 }
92 }
93 }
94 }
95 void postorder(BTNode *bt) { //非递归后序遍历
96 if(bt!=NULL) {
97 BTNode *stack1[maxsize],*stack2[maxsize];
98 int top1=-1,top2=-1;
99 BTNode *p;
100 p=bt;
101 stack1[++top1]=bt;
102 while(top1!=-1) {
103 p=stack1[top1--];
104 stack2[++top2]=p;
105 if(p->lchild!=NULL) {
106 stack1[++top1]=p->lchild;
107 }
108 if(p->rchild!=NULL) {
109 stack1[++top1]=p->rchild;
110 }
111 }
112 while(top2!=-1) {
113 p=stack2[top2--];
114 visit(p);
115 }
116 }
117 }
118 int main() {
119
120 return 0;
121 }
树-二叉树的遍历
最新推荐文章于 2024-08-26 21:46:59 发布