数据结构之树的遍历

来源:互联网 发布:手机运行windows 编辑:程序博客网 时间:2024/05/17 09:25

二叉树的递归先序遍历

二叉树的非递归中序遍历

二叉树的非递归层次序遍历



////by coolxxx//#include<bits/stdc++.h>#include<iostream>#include<algorithm>#include<string>#include<iomanip>#include<map>#include<stack>#include<queue>#include<set>#include<bitset>#include<memory.h>#include<time.h>#include<stdio.h>#include<stdlib.h>#include<string.h>//#include<stdbool.h>#include<math.h>#pragma comment(linker,"/STACK:1024000000,1024000000")#define min(a,b) ((a)<(b)?(a):(b))#define max(a,b) ((a)>(b)?(a):(b))#define abs(a) ((a)>0?(a):(-(a)))#define lowbit(a) (a&(-a))#define sqr(a) ((a)*(a))#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))#define mem(a,b) memset(a,b,sizeof(a))#define eps (1e-8)#define J 10000#define mod 2147493647#define MAX 0x7f7f7f7f#define PI 3.14159265358979323#define N 264using namespace std;typedef long long LL;double anss;LL aans;int cas,cass;int n,m,lll,ans;const int OK=1,ERROR=0,INFEASIBLE=-1;typedef int Status;typedef char Elemtype;typedef struct BiTNode{Elemtype data;BiTNode *lchild,*rchild;}BiTNode,*BiTree;Status CreateBiTree(BiTree &T)//递归的建立一棵二叉树 输入为二叉树的先序序列 #表示空树{char ch;ch=getchar();if(ch=='#')T=NULL;else{if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW);T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}return OK;}//CreateBiTreeStatus DestroyBiTree(BiTree &T){if(T){DestroyBiTree(T->lchild);DestroyBiTree(T->rchild);free(T);T=NULL;}}//DestroyBiTreeStatus PreOrderTraverse(BiTree T)//按照前序递归遍历二叉树{if(T){cout<<T->data<<" ";PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}return OK;}//PreOrderTraverseStatus InOrderTraverse(BiTree T)//按照中序非递归遍历二叉树{stack<BiTree>S;BiTree p=T;while(p || !S.empty()){if(p){S.push(p);p=p->lchild;}else{p=S.top();S.pop();cout<<p->data<<" ";p=p->rchild;}}return OK;}//InOrderTraverseStatus LevelOrderTraverse(BiTree T)//照层次序非递归遍历二叉树{queue<BiTree>Q;BiTree p;Q.push(T);while(!Q.empty()){p=Q.front();Q.pop();cout<<p->data<<" ";if(p->lchild)Q.push(p->lchild);if(p->rchild)Q.push(p->rchild);}return OK;}//LevelOrderTraverseint main(){#ifndef ONLINE_JUDGEfreopen("1.txt","r",stdin);//freopen("2.txt","w",stdout);#endifint i,j,k;int x,y,z;//init();//for(scanf("%d",&cass);cass;cass--)//for(scanf("%d",&cas),cass=1;cass<=cas;cass++)//while(~scanf("%s",s))//while(~scanf("%d%d",&n,&m)){BiTree T;CreateBiTree(T);PreOrderTraverse(T);puts("");InOrderTraverse(T);puts("");LevelOrderTraverse(T);puts("");DestroyBiTree(T);}return 0;}/*////*/


0 0
原创粉丝点击