二叉树遍历的递归与非递归实现

本次测试实现了二叉树先序遍历的递归与非递归实现,并测试了其性能,测试结果如预先考虑的一致,就是非递归的性能要不递归的性能高。

同时也实现了二叉树的广度优先的遍历,通过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日相关推荐

  1. 我来说说2015年8月25日锤子科技夏季手机发布会的内情

    我来说说2015年8月25日锤子科技夏季手机发布会的内情, 虽然我也没去现场,我也不是锤子科技的,我跟锤子科技的人也不熟.那算什么内情啊?好吧,改一下,我来瞎说一下2015锤子科技夏季手机发布会的内情 ...

  2. 传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(2015年10月25日23:28:50)

    day01 win 7系统打开DOS有趣方法:按住shift+右键,单击"在此处打开命令窗口"(注意:在此处可以是任何的文件夹,不一定是桌面) 用DOS删除的文件不可以在回收站恢复 ...

  3. KMP算法(待优化)--2015年7月25日14:04:25V1.0版

    #include <iostream> #include <string> #include <cstring> using namespace std;void ...

  4. 简单的字谜游戏--可扩展--2015年7月25日14:58:00V1.1版

    1.string类find匹配法 #include <iostream> #include <string> #include <cstring> #include ...

  5. 全国计算机四六级报名时间2015,2015年英语四六级口语考试报名时间:10月25日起...

    出国留学网英语栏目提示:2015年11月六级口语考试即将开始报名,请跟着小编一起阅读以下的口语考试相关事宜. 全国大学英语四.六级委员会办公室最新发布的<2015年11月全国大学英语四.六级口语 ...

  6. 面试经历---YY欢聚时代(2015年11月21日上午初试、25日下午复试)

    YY欢聚时代一年多前去面试过一次,当时鄙视了,在现在的公司呆了1年半了,感觉做得很不爽,而且薪资又不满意,所以想找个新工作,就想去YY面试. 下面将两次YY面试的经历写出来,包括一次初试和一次复试的面 ...

  7. linux运维实战练习-2015年9月13日-9月15日课程作业(练习)安排

    一.作业(练习)内容: 1.描述shell程序的运行原理(可附带必要的图形说明): 2.总结shell编程中所涉及到的所有知识点(如:变量.语法.命令状态等等等,要带图的哟): 3.总结课程所讲的所有 ...

  8. 八月25日8点半服务器维修,三国乱世8月25日合区维护公告

    <三国乱世>8月合区维护公告 尊敬的玩家: 为保证游戏质量,增加更多玩家之间交流和互动的机会,实现最激烈的国战和战斗氛围.我们将于2015年8月25日对<三国乱世>部分服务器进 ...

  9. 全球六大国际域名解析量统计报告(6月25日)

    IDC评述网(idcps.com)06月29日报道:根据DailyChanges公布的实时数据显示,在2015年6月25日,全球六大国际域名解析量总量持续攀升至153,246,819个,环比6月16日 ...

最新文章

  1. 如何用OKR搞垮一个团队?
  2. bzoj3171: [Tjoi2013]循环格(费用流)
  3. python中的diff_python-Numpy和diff()
  4. imdb导mysql_keras如何导入本地下载的imdb数据集?
  5. python如何取消缩进_python如何处理缩进
  6. InfoPath中的Rich Text Box中如何加“回车”
  7. 那些年干过的事(六)—无源码修改版本号
  8. BZOJ3437 小P的牧场
  9. 构建集中式会话的分析与实践(一)
  10. 大写金额用计算机简单些,大写一到十怎么写 数字一到十的大写怎么写(开票用的大写)...
  11. 【完美解决】ds1302外置时钟模块重复初始化时间问题(单片机掉电,模块电池供电)
  12. cm11 android l,【鹰眼出品】安卓4.4.4 CM11已刷,流畅度爆表!《转》
  13. 让更多的开发者听到您的声音,移动开发征文活动现已开始 | 开发者说·DTalk
  14. Debian配置主机名,域名,网卡IP地址
  15. 色差仪确保番茄酱色彩一致性
  16. python 发票信息提取_Python提取发票内容保存到Excel.md
  17. 微信公众号扫一扫功能vue配置
  18. Maven学习——maven基础
  19. 单极性归零NRZ码、双极性非归零NRZ码、2ASK、2FSK、2PSK、2DPSK及MATLAB仿真
  20. HTTP协议状态码的含义

热门文章

  1. LabVIEW开发的上位机界面在其它电脑分辨率下-界面窗口偏移显示问题解决
  2. 30个你应该在2022年里使用的JavaScript 动画库
  3. 基于微信小程序的电影资讯系统的设计与实现
  4. sillyGirl傻妞命令大全【最新完整版】(4月1日)
  5. Django项目使用gunicorn
  6. STL浅谈(2)——链表+相应迭代器实现
  7. linux查询日志命令加过滤,Linux记录-筛选日志sed、find、tail,du,awk命令
  8. Jest和Enzyme使用
  9. 周迅 女明星卸妆后判若两人 (图)
  10. 一文快速入门 Kotlin 协程