树-二叉树的遍历
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 }
越努力越幸运