2015年2月25日
二叉树遍历的递归与非递归实现
本次测试实现了二叉树先序遍历的递归与非递归实现,并测试了其性能,测试结果如预先考虑的一致,就是非递归的性能要不递归的性能高。
同时也实现了二叉树的广度优先的遍历,通过queue来实现的。
package com.pip.structure.tree;import java.util.ArrayDeque;
import java.util.Stack;public class MyNode {private int nodeValue;private MyNode leftNode;private MyNode rightNode;public MyNode(int v){this.nodeValue=v;}public void addElement(int k){MyNode m=new MyNode(k);if(k>=this.nodeValue){if(this.rightNode!=null){rightNode.addElement(k);}else{this.rightNode=m;}}else{if(this.leftNode!=null){leftNode.addElement(k);}else{this.leftNode=m;}}}public void prePrint(MyNode root){if(root==null){return;}System.out.print(root.nodeValue+"/");prePrint(root.leftNode);prePrint(root.rightNode);}public void prePrintNonRec(MyNode root){Stack<MyNode> s=new Stack<MyNode>();s.push(root);while(!s.empty()){MyNode m=s.pop();System.out.print(m.nodeValue+"/");if(m.rightNode!=null){s.push(m.rightNode);}if(m.leftNode!=null){s.push(m.leftNode);}}}public void levelOrderTraversal(MyNode root){if(root==null){return;}ArrayDeque<MyNode> que=new ArrayDeque<MyNode>();que.add(root);while(!que.isEmpty()){MyNode m=que.poll();System.out.print(m.nodeValue+"/");if(m.leftNode!=null){que.add(m.leftNode);}if(m.rightNode!=null){que.add(m.rightNode);}}}public static void main(String[] args){MyNode m=new MyNode(8);m.addElement(3);m.addElement(9);m.addElement(14);m.addElement(1);m.addElement(15);m.addElement(2);m.prePrint(m);m.prePrintNonRec(m);m.levelOrderTraversal(m);}}
性能测试代码
package com.pip.structure.tree;import java.util.Date;import org.junit.Test;public class TreeTest {@Testpublic void testTree(){MyNode m=new MyNode(500);//add Element for the treefor(int i=0;i<10000;i++){int k=(int) Math.round(10000*Math.random());m.addElement(k);}long beforeTime = new Date().getTime(); m.prePrint(m);long afterTime = new Date().getTime();System.out.println();System.out.println("recursion-time--" + (afterTime - beforeTime) + "ms");long beforeTime2 = new Date().getTime(); m.prePrintNonRec(m);long afterTime2 = new Date().getTime();System.out.println();System.out.println("non--recursion-time--" + (afterTime2 - beforeTime2) + "ms");}}
2015年2月25日相关推荐
- 我来说说2015年8月25日锤子科技夏季手机发布会的内情
我来说说2015年8月25日锤子科技夏季手机发布会的内情, 虽然我也没去现场,我也不是锤子科技的,我跟锤子科技的人也不熟.那算什么内情啊?好吧,改一下,我来瞎说一下2015锤子科技夏季手机发布会的内情 ...
- 传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(2015年10月25日23:28:50)
day01 win 7系统打开DOS有趣方法:按住shift+右键,单击"在此处打开命令窗口"(注意:在此处可以是任何的文件夹,不一定是桌面) 用DOS删除的文件不可以在回收站恢复 ...
- KMP算法(待优化)--2015年7月25日14:04:25V1.0版
#include <iostream> #include <string> #include <cstring> using namespace std;void ...
- 简单的字谜游戏--可扩展--2015年7月25日14:58:00V1.1版
1.string类find匹配法 #include <iostream> #include <string> #include <cstring> #include ...
- 全国计算机四六级报名时间2015,2015年英语四六级口语考试报名时间:10月25日起...
出国留学网英语栏目提示:2015年11月六级口语考试即将开始报名,请跟着小编一起阅读以下的口语考试相关事宜. 全国大学英语四.六级委员会办公室最新发布的<2015年11月全国大学英语四.六级口语 ...
- 面试经历---YY欢聚时代(2015年11月21日上午初试、25日下午复试)
YY欢聚时代一年多前去面试过一次,当时鄙视了,在现在的公司呆了1年半了,感觉做得很不爽,而且薪资又不满意,所以想找个新工作,就想去YY面试. 下面将两次YY面试的经历写出来,包括一次初试和一次复试的面 ...
- linux运维实战练习-2015年9月13日-9月15日课程作业(练习)安排
一.作业(练习)内容: 1.描述shell程序的运行原理(可附带必要的图形说明): 2.总结shell编程中所涉及到的所有知识点(如:变量.语法.命令状态等等等,要带图的哟): 3.总结课程所讲的所有 ...
- 八月25日8点半服务器维修,三国乱世8月25日合区维护公告
<三国乱世>8月合区维护公告 尊敬的玩家: 为保证游戏质量,增加更多玩家之间交流和互动的机会,实现最激烈的国战和战斗氛围.我们将于2015年8月25日对<三国乱世>部分服务器进 ...
- 全球六大国际域名解析量统计报告(6月25日)
IDC评述网(idcps.com)06月29日报道:根据DailyChanges公布的实时数据显示,在2015年6月25日,全球六大国际域名解析量总量持续攀升至153,246,819个,环比6月16日 ...
最新文章
- 如何用OKR搞垮一个团队?
- bzoj3171: [Tjoi2013]循环格(费用流)
- python中的diff_python-Numpy和diff()
- imdb导mysql_keras如何导入本地下载的imdb数据集?
- python如何取消缩进_python如何处理缩进
- InfoPath中的Rich Text Box中如何加“回车”
- 那些年干过的事(六)—无源码修改版本号
- BZOJ3437 小P的牧场
- 构建集中式会话的分析与实践(一)
- 大写金额用计算机简单些,大写一到十怎么写 数字一到十的大写怎么写(开票用的大写)...
- 【完美解决】ds1302外置时钟模块重复初始化时间问题(单片机掉电,模块电池供电)
- cm11 android l,【鹰眼出品】安卓4.4.4 CM11已刷,流畅度爆表!《转》
- 让更多的开发者听到您的声音,移动开发征文活动现已开始 | 开发者说·DTalk
- Debian配置主机名,域名,网卡IP地址
- 色差仪确保番茄酱色彩一致性
- python 发票信息提取_Python提取发票内容保存到Excel.md
- 微信公众号扫一扫功能vue配置
- Maven学习——maven基础
- 单极性归零NRZ码、双极性非归零NRZ码、2ASK、2FSK、2PSK、2DPSK及MATLAB仿真
- HTTP协议状态码的含义