树-二叉树的遍历

  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 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值