利用栈实现中序遍历。

建立的栈和前几天的类似,都是通用性的,依靠强制类型转换, 支持不同的数据类型。

下面写一下这个通用性的栈

public class ObjectStack {/*栈深度*/public static final int MAX_DEPTH = 10;/*实际栈深*/int depth;/*存储数值*/Object[] data;/**建立一个空的顺虚表*/public ObjectStack() {depth = 0;data = new Object[MAX_DEPTH];}// Of the first constructor/**重写toString()方法*/public String toString() {String resultString = "";for (int i = 0; i < depth; i++) {resultString += data[i];} // Of for ireturn resultString;}

出栈入栈操作:

    //入栈public boolean push(Object paraObject) {if (depth == MAX_DEPTH) {System.out.println("Stack full.");return false;} data[depth] = paraObject;depth++;return true;}//出栈public Object pop() {if (depth == 0) {System.out.println("Nothing to pop.");return '\0';} Object resultObject = data[depth - 1];depth--;return resultObject;}

还增加了判空方法:

 //判空public boolean isEmpty() {if (depth == 0) {return true;}//Of ifreturn false;}

再main方法中对上述方法进行调用:

public static void main(String args[]) {ObjectStack tempStack = new ObjectStack();for (char ch = 'a'; ch < 'm'; ch++) {tempStack.push(new Character(ch));System.out.println("The current stack is: " + tempStack);} // Of for ichar tempChar;for (int i = 0; i < 12; i++) {tempChar = ((Character)tempStack.pop()).charValue();System.out.println("Poped: " + tempChar);System.out.println("The current stack is: " + tempStack);} // Of for i}

验证实例:

下面是利用我们上面写的通用性栈,来实现中序遍历。

其思想为:当树不为空时,入栈,接下来访问其左孩子。当左孩子不存在时,栈内元素出栈输出并访问其右孩子,直至访问完树内元素,讲栈内元素全部输出。可以手动模拟一遍,很容易理解。

public void inOrderVisitWithStack() {ObjectStack tempStack = new ObjectStack();//创建栈BinaryCharTree tempNode = this;//二叉树/* 二叉树遍历 */while (!tempStack.isEmpty() || tempNode != null) {if (tempNode != null) {tempStack.push(tempNode);tempNode = tempNode.leftChild;} else {tempNode = (BinaryCharTree) tempStack.pop();System.out.print("" + tempNode.value + " ");tempNode = tempNode.rightChild;} } }

个人还是倾向于递归(毕竟代码简单,好想),但是今天主要是用来通用性栈

抄代码DAY18 二叉树深度遍历的栈实现相关推荐

  1. Day13——二叉树深度遍历的栈实现

    如果明白了之前递归深度遍历二叉树,那也能容易想到用栈实现二叉树深度遍历. 本篇博客以这棵树为例: 中序遍历 中序遍历顺序:左子树,当前结点,右子树. 从根结点A开始,先将它压栈,发现它有左孩子,则处理 ...

  2. java代码实现二叉树的遍历

    一.二叉树的定义: 二叉树是树形结构的一个重要类型.许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重 ...

  3. 【数据结构与算法】二叉树深度遍历

    leetcode:力扣本题链接 leetcode所有深度遍历链接 !!!后文有动画演示一定要结合动画理解!!! 遍历顺序取决于中间节点所在的位置,假如中间节点在最后,那么就是后序遍历. 在非递归算法中 ...

  4. [Leetcode][第100题][JAVA][相同的树][二叉树][深度遍历][递归]

    [问题描述][中等] [解答思路] 深度遍历/递归 终止条件与返回值: 当两棵树的当前节点都为 null 时返回 true 当其中一个为 null 另一个不为 null 时返回 false 当两个都不 ...

  5. 一步一步写算法(之二叉树深度遍历)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 深度遍历是软件开发中经常遇到的遍历方法.常用的遍历方法主要有下面三种:(1)前序遍历:(2)中 ...

  6. 对称二叉树--深度遍历与广度遍历

    问题来源:对称二叉树 问题描述:给定一个二叉树,检查它是否是镜像对称的. 比如,下面这个二叉树是镜像对称的: 1 / 2 2 / \ / 3 4 4 3 而这个二叉树则不是镜像对称的. 1 / 2 2 ...

  7. 日撸 Java 三百行: DAY21 二叉树的深度遍历的递归实现

    0.主题 今天实现递归版本的二叉树深度遍历,并实现两个基于此遍历的方法,即求二叉树深度与二叉树结点数. 1.二叉树的深度遍历 深度优先遍历,顾名思义就是一直往深处遍历,直到无路可走再回头换个方向继续往 ...

  8. 算法9---二叉树的遍历不用栈和递归

    二叉树的遍历不用栈和递归 转自:ACM之家 http://www.acmerblog.com/inorder-tree-traversal-without-recursion-and-without- ...

  9. js中树形结构的深度遍历与广度遍历

    树形结构的深度遍历与广度遍历 定义 深度遍历:一个树形结构中,由一个数据分支全部遍历完才去遍历另外一个分支,直至全部数据遍历完成. 广度遍历:先遍历最外层的分支数据,然后一层一层的进行深入遍历,直至全 ...

最新文章

  1. JsonUtils fasterxml jackson
  2. 4.Hibernate O/R 映射
  3. POJ-2065 SETI 高斯消元,扩展GCD
  4. isis学不到looback口的路由_使用路由器后测速达不到宽带的网速怎么办?
  5. SQL中cross join,left join,right join ,full join,inner join 的区别
  6. 通过Mybatis建表问题
  7. leetcode113. 路径总和 II
  8. Android平台各类恶意软件及病毒概览
  9. 【读书笔记】非暴力沟通
  10. windows更改pip源_让你的 pip下载速度 飞起来
  11. 软考信息安全工程师历年真题及答案
  12. Android平台语音交友软件源码开发,语音通话的实现
  13. 矩阵分析与应用-1.7-逆矩阵
  14. JNI和NKD入门系列一,纯java工程下JNI的开发流程(mac系统)
  15. 语音 视频 质量测试软件,DxOMARK官方发布视频,了解如何测试手机音频质量
  16. Ubuntu平台 常用插件下载(部分含源码)
  17. 《当程序员的那些狗日日子》(四)喘过气来了
  18. linux 开机启动方法之service
  19. WIN2008SERVER下的SQL2000问题
  20. Android 一键清理内存,缓存,文件代码

热门文章

  1. 目前计算机科技的最前沿,全球最前沿的60个科技问题!爱知者必看
  2. 2021年中国同城配送行业发展势头良好,越来越受资本家的青睐[图]
  3. cannot be resolved or is not a field
  4. scala使用for循环
  5. 梦幻桌面wmv_【系统萌化】pjdex制作的梦幻桌面8wmv动态背景
  6. python二手交易平台代码_使用Python探索二手车市场(含代码)
  7. 银川成立“智慧城市”应急指挥中心
  8. 用ACCESS2010打文出现件“system.ltb”版本2.0,丢失或损坏的应用的解决办法
  9. (5)豪华套件触摸屏
  10. android 去了按键,【联想手机】怎样去除android系统的虚拟按键