博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构 二叉树
阅读量:4934 次
发布时间:2019-06-11

本文共 4533 字,大约阅读时间需要 15 分钟。

基于hdu1662改的二叉树(www.cnblogs.com/general10/p/5856794.html)

非递归遍历忘记打了 回头补上……

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #define M(a,b) memset(a,b,sizeof(a)) 12 using namespace std; 13 typedef long long ll; 14 const int inf=0x3f3f3f3f; 15 queue
ans; 16 struct Binary_Tree //二叉树 17 { 18 int value; 19 Binary_Tree *lchild,*rchild; 20 Binary_Tree() 21 { 22 value=0; 23 lchild=rchild=NULL; 24 } 25 }; 26 27 bool add(Binary_Tree *&Root,char *s,int value) //向二叉树中加入点 28 { 29 if(Root==NULL) 30 Root=new Binary_Tree(); 31 if(*s=='\0') 32 { 33 if(Root->value!=0) 34 { 35 return false; 36 } 37 Root->value=value; 38 return true; 39 } 40 if(*s=='L') //寻找路径 41 { 42 return add(Root->lchild,s+1,value); 43 } 44 else if(*s=='R') 45 { 46 return add(Root->rchild,s+1,value); 47 } 48 return false; 49 } 50 51 //bool add(Binary_Tree *&Root,int num,int value){ //向完全二叉树中加入点 52 // if(Root==NULL) 53 // { 54 // Root=new Binary_Tree(); 55 // Root->value=value; 56 // return true; 57 // } 58 // if(num==0||num==1) //根据序号判断左右孩子 59 // { 60 // if(num) 61 // (Root->rchild)->value=value; 62 // else 63 // (Root->lchild)->value=value; 64 // return true; 65 // } 66 // if(num%2==0) //寻找路径 67 // { 68 // return add(Root->lchild,num/2,value); 69 // } 70 // else 71 // { 72 // return add(Root->rchild,num/2+1,value); 73 // } 74 // return false; 75 //} 76 77 void Delete(Binary_Tree *Root) //删除二叉树 78 { 79 if(Root==NULL) return ; 80 Delete(Root->lchild); 81 Delete(Root->rchild); 82 delete Root; 83 } 84 bool bfs(Binary_Tree *Root) //层次遍历 85 { 86 Binary_Tree *q[260]; //数组模拟队列 87 int front=0; 88 int rear=1; 89 q[0]=Root; 90 while (front
value) //没有值就返回false 94 { 95 return false; 96 } 97 ans.push(temp->value); //当前节点入ans队 98 if(temp->lchild) //左孩子入队 99 {100 q[rear++]=temp->lchild;101 }102 if(temp->rchild) //右孩子入队103 {104 q[rear++]=temp->rchild;105 }106 }107 return true;108 }109 110 bool preorder(Binary_Tree *Root) //递归先序遍历二叉树111 {112 if(Root==NULL)113 {114 return false;115 }116 ans.push(Root->value);117 preorder(Root->lchild);118 preorder(Root->rchild);119 return true;120 }121 122 bool midorder(Binary_Tree *Root) //递归中序遍历二叉树123 {124 if(Root==NULL)125 {126 return false;127 }128 midorder(Root->lchild);129 ans.push(Root->value);130 midorder(Root->rchild);131 return true;132 }133 134 bool inorder(Binary_Tree *Root) //递归后序遍历二叉树135 {136 if(Root==NULL)137 {138 return false;139 }140 inorder(Root->lchild);141 inorder(Root->rchild);142 ans.push(Root->value);143 return true;144 }145 146 int main()147 {148 Binary_Tree *Root=NULL;149 char s[50];150 bool no=false;151 while(true)152 {153 no=false;154 Delete(Root);155 Root=NULL; //二叉树初始化156 while(true)157 {158 if(scanf("%s",s)==EOF) //读入159 {160 return 0;161 }162 if(strcmp(s,"()")==0)163 {164 break;165 }166 int val;167 char loc[10];168 strcpy(loc,"");169 sscanf(&s[1],"%d",&val);170 char *start=strchr(s,',')+1;171 sscanf(start,"%[A-Z]",&loc);172 if(!add(Root,loc,val))173 {174 no=true;175 }176 }177 // int n; //建立完全二叉树178 // scanf("%d",&n); //输入二叉树层数179 // int num=(int)(pow(2,n)+0.5)-1;180 // int sum=0;181 // while(num!=sum)182 // {183 // int value;184 // scanf("%d",&value);185 // sum++;186 // add(Root,sum,value);187 // }188 string str;189 while(cin>>str)190 {191 if(str=="end") break;192 if(str=="front")193 {194 preorder(Root);195 while(!ans.empty())196 {197 int ll=ans.front();198 ans.pop();199 printf("%d%c",ll,ans.empty()?'\n':' ');200 }201 }202 if(str=="middle")203 {204 midorder(Root);205 while(!ans.empty())206 {207 int ll=ans.front();208 ans.pop();209 printf("%d%c",ll,ans.empty()?'\n':' ');210 }211 }212 if(str=="back")213 {214 inorder(Root);215 while(!ans.empty())216 {217 int ll=ans.front();218 ans.pop();219 printf("%d%c",ll,ans.empty()?'\n':' ');220 }221 }222 if(str=="bfs")223 {224 bfs(Root);225 while(!ans.empty())226 {227 int ll=ans.front();228 ans.pop();229 printf("%d%c",ll,ans.empty()?'\n':' ');230 }231 }232 }233 /* if(no)234 {235 puts("not complete");236 }237 else238 {239 if(!bfs(Root))240 puts("not complete");241 else242 {243 while(!ans.empty())244 {245 int ll=ans.front();246 ans.pop();247 printf("%d%c",ll,ans.empty()?'\n':' ');248 }249 }250 }*/251 }252 return 0;253 }254 /*255 256 (11,LL) (7,LLL) (8,R)257 (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ()258 259 (3,L) (4,R) ()260 261 262 263 5264 4 8265 11 13 4266 7 2 1267 268 */

 

转载于:https://www.cnblogs.com/general10/p/6114396.html

你可能感兴趣的文章
【记录一下】phpMyAdmin 4.5.0-beta1 发布,要求 PHP 5.5
查看>>
Windows 7个性化配置,关闭Win7动画效果,设置窗口背景为“ 豆绿色”,移动“我的文档”...
查看>>
AtCoder Grand Contest 011题解
查看>>
AtCoder Grand Contest 010题解
查看>>
CODE FESTIVAL 2016 qual A题解
查看>>
CUDA -- 内存分配
查看>>
在C++工程上添加CUDA编译环境
查看>>
CUDA -- 规约求矩阵的行和
查看>>
一道有意思的思维题 --- 排序、枚举
查看>>
WXML 在前端页面中规定时间格式方法分享
查看>>
对博弈活动中蕴含的信息论原理的讨论,以及从熵角度看不同词素抽象方式在WEBSHELL文本检测中的效果区别...
查看>>
信道容量及信道编码原理学习
查看>>
关于信息论中熵、相对熵、条件熵、互信息、典型集的一些思考
查看>>
浅谈独立特征(independent features)、潜在特征(underlying features)提取、以及它们在网络安全中的应用...
查看>>
从随机过程的熵率和马尔科夫稳态过程引出的一些思考 - 人生逃不过一场马尔科夫稳态...
查看>>
《A First Course in Abstract Algebra with Applications》-chaper1-数论-关于素数
查看>>
Responsive设计——不同设备的分辨率设置
查看>>
开博篇
查看>>
需求调研分析
查看>>
Linux系统查看系统是32位还是64位方法总结(转)
查看>>