Boring Homework 二叉搜索树的打印,模拟
来源:互联网 发布:电脑ie卸载软件 编辑:程序博客网 时间:2024/06/11 20:24
写了好长时间,注意递归的使用,思路一定要清晰。
还有注意的地方:打印的时候一定要先打印到缓存buffer中,然后再输出到屏幕上面。
#include <bits/stdc++.h>using namespace std;int idx = 0;int val[100],lft[100],rgt[100];int num[100][2];int root;void insert(int &rt,int x){if(rt == 0) {rt = ++idx;val[rt] = x;}else{if(x > val[rt]) {insert(rgt[rt],x);num[rt][1]++;}else{insert(lft[rt],x);num[rt][0]++;}}}char buf[200][200];int endpos[200];int cnt = 0;int print(int rt,int beg,int &hd,int line){int f = 0;int sm1,sm2,end,endn = 0;if(lft[rt]){int hd1;sm1 = num[rt][0];print(lft[rt],beg,hd1,line+2);hd = sm1+beg;for(int i = beg;i <= hd;i++) buf[line][i] = buf[line+1][i] = ' ';buf[line+1][hd1] = '|';endn = hd1+1;buf[line][hd1] = '+';for(int i = hd1+1;i < hd;++i) buf[line][i] = '-';f = 1;}else{hd = beg;}buf[line][hd] = 'o';end = hd+1;if(rgt[rt]){int hd2 = 0;print(rgt[rt],hd+1,hd2,line+2);for(int i = hd;i < hd2;++i)buf[line+1][i] = ' ';buf[line+1][hd2] = '|';endn = hd2+1;buf[line][hd2] = '+';for(int i = hd+1;i < hd2;i++) buf[line][i] = '-';end = hd2+1;f = 1;}//buf[line+1][endn] = buf[line][end] = 0;endpos[line+1] = max(endpos[line+1],endn);endpos[line] = max(endpos[line],end);cnt = max(cnt,line+f);}int main(){int T,cas = 0;cin>>T;while(T--){idx = 0;cnt = 0;memset(num,0,sizeof(num));memset(lft,0,sizeof(lft));memset(rgt,0,sizeof(rgt));memset(val,0,sizeof(val));memset(endpos,0,sizeof(endpos));for(int i = 0;i < 200;++i) for(int j = 0;j < 200;j++) buf[i][j] = ' ';//memset(val,-1,sizeof(val));int n;scanf("%d",&n);root = 0;for(int i = 0;i < n;++i){int tmp;scanf("%d",&tmp);insert(root,tmp);}printf("Case #%d:\n",++cas);int hd;print(1,0,hd,0);for(int i = 0;i <= cnt;++i) buf[i][endpos[i]] = 0;for(int i = 0;i <= cnt;++i) puts(buf[i]);}return 0;}/*1003 1 3 2*/
阅读全文
0 0
- Boring Homework 二叉搜索树的打印,模拟
- hdu4095 Very Boring Homework(笛卡尔树+模拟)
- 2011ACM上海邀请赛B题(Boring Homework)----模拟题
- homework.树.二叉树
- 蓝桥杯-横向打印二叉树(模拟)
- 打印普通二叉树最大搜索子树
- 二叉搜索树及其模拟实现
- 二叉树的打印
- 二叉搜索树(BST)的常用操作:建树、插入、查询、删除、排序打印
- 团体程序设计天梯赛-练习集 -- L3-016. 二叉搜索树的结构(模拟)
- 打印二叉树的图
- 打印二叉树的深度
- 打印二叉树的路径
- UVa 12010 - Boring Homework 解题报告
- 二叉搜索树的插入,搜索,删除
- 二叉搜索树的实现
- 二叉搜索树的建立
- 搜索二叉树的初始化
- SVN与Git比较(一)集中式vs…
- 解决URL传参乱码问题
- FTP环境搭建
- Javascript创建对象的常用方法
- Python爬取淘宝搜索页,使用Selenium+BeautifulSoup
- Boring Homework 二叉搜索树的打印,模拟
- Unity与安卓交互心得
- 读取与生成csv最简便方法
- apache shiro学习笔记--03(与spring整合)
- php_桶(简易)排序,冒泡排序写法
- struts2体系图——3
- Java知识---函数
- 【python】list排序 (内置sort函数)
- spring框架入门学习