分别用递归和非递归方式实现二叉树先序、中序和后序遍历
用递归和非递归方式,分别按照二叉树先序、中序和后序打印所有的节点。我们约定:先序遍历顺序 为根、左、右;中序遍历顺序为左、根、右;后序遍历顺序为左、右、根

先序遍历:建立一个栈,头节点入栈,将其出栈并打印,之后再依次将其右子节点入栈,左子节点入栈,栈顶节点出栈并打印,再依次将其右子节点和左子节点入栈,再将栈顶节点出栈并打印,递归实现。

public static void preOrderUnRecur(Node head){System.out.println("PreOrder:");if(head != null){Stack<Node> stack = new Stackk<Node>();stack.add(head);while(!stack.isEmpty()){head = stack.pop();System.out.print(head.value + " ");if(head.right != null){stack.push(head.right);}if(head.left!= null){stack.push(head.left);}}}System.out,println();
}

中序遍历:先将二叉树的左边界依次入栈,头节点出栈并打印,判断该节点是否有右子树,如果有则再将其子树的左边界入栈,递归实现,若没有右子树,继续将栈顶节点出栈并打印,如果有右子树则再将其子树左边界入栈,递归实现

public static void inOrderUnRecur(Node head){System.out.println("InOrder:");if(head != null){Stack<Node> stack = new Stack<Node>();while(!stackk.isEmpty() || head != null){if(head != null){stack.push(head);head = head.left;}else{head = stack.pop();System.out.print(head.value + " ");head = head.right;}}}System.out.println();
}

后序遍历:头节点入栈,用一个变量表示栈顶

public static void posOrderUnRecur1(Node head){System.out.print("PosOrder:");if(head != null){Stack<Node> s1 = new Stack<Node>();Stack<Node> s2 = new Stack<Node>();si.push(head);while(!s1.isEmpty()){head = s1.pop();s2.push(head);if(head.left != null){s1.push(head.left);}if(head.right != null){s1.push(head.right);}}while(!s2.isEmpty()){System.out.print(s2.pop().value + " ");}}System.out,println();
}public static void posOrderUnRecur2(Node h){Sytem.out.print("PosOrder:");if(h != null){Stack<Node> stack = new Stack<Node>();stack.push(h);Node c = null;while(!stack.isEmpty()){c = stack.peek();if(c.left != null && h != c.left && h != c.right){stack.push(c.left);}else if(c.right != null && h != c.right){stack.push(c.right);}else{System.out.print(stack.pop().value + " ");h = c;}}}System.out.println();
}

分别用递归和非递归方式实现二叉树先序、中序和后序遍历(java实现)相关推荐

  1. 二叉树的四种遍历方式(递归和非递归双重实现)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  2. 左神算法:分别用递归和非递归方式实现二叉树先序、中序和后序遍历(Java版)

    本题来自左神<程序员代码面试指南>"分别用递归和非递归方式实现二叉树先序.中序和后序遍历"题目. 题目 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点 ...

  3. 二叉树的三种遍历方式(递归、非递归和Morris遍历)

    二叉树的三种遍历方式(递归.非递归和Morris遍历) 原文:http://www.linuxidc.com/Linux/2015-08/122480.htm 二叉树遍历是二叉树的最基本的操作,其实现 ...

  4. 分别采用递归和非递归方式编写两个函数,求一棵二叉树中叶子节点个数

    分别采用递归和非递归方式编写两个函数,求一棵二叉树中叶子节点个数 #include #include #define MAXSIZE 50 typedef char datatype; typedef ...

  5. golang二叉树的递归和非递归方式的前中后序遍历

    二叉树的递归和非递归方式中序遍历 方法一:递归 思路与算法 首先我们需要了解什么是二叉树的中序遍历:按照访问左子树--根节点--右子树的方式遍历这棵树() (前序和后序遍历方式一样,就是打印root节 ...

  6. python创建树结构、求深度_数据结构-树以及深度、广度优先遍历(递归和非递归,python实现)...

    前面我们介绍了队列.堆栈.链表,你亲自动手实践了吗?今天我们来到了树的部分,树在数据结构中是非常重要的一部分,树的应用有很多很多,树的种类也有很多很多,今天我们就先来创建一个普通的树.其他各种各样的树 ...

  7. 二叉树的几种递归和非递归式遍历:

    二叉树的几种递归和非递归式遍历: 1 #include <fstream> 2 #include <iostream> 3 4 using namespace std; 5 6 ...

  8. 转载:二叉树的前中后和层序遍历详细图解(递归和非递归写法)

    二叉树的前中后和层序遍历详细图解(递归和非递归写法) Monster_ii 2018-08-27 17:01:53 50530 收藏 403 分类专栏: 数据结构拾遗 文章标签: 二叉树 前序 中序 ...

  9. 九十五、二叉树的递归和非递归的遍历算法模板

    @Author:Runsen 刷Leetcode,需要知道一定的算法模板,本次先总结下二叉树的递归和非递归的遍历算法模板. 二叉树的四种遍历方式,前中后加上层序遍历.对于二叉树的前中后层序遍历,每种遍 ...

最新文章

  1. Selenium之运行效果展示
  2. Python--粒子滤波定位案例程序
  3. IBM-JAVA面试题
  4. Linux线程(六)
  5. java 扩展数据类型_005Java学习--数据类型及拓展
  6. Sublime Test3 添加一键格式化XML文件插件
  7. android touch事件坐标原点,Android onTouch事件与手势操作
  8. STM32启动文件详解-比较清晰的一篇
  9. 贝佐斯正接受14小时训练 以为周二进行的首次太空飞行做准备
  10. Ubuntu MySQL 配置 ip binding
  11. Github-初始化仓库
  12. 计算机培训中学语文研修计划,初中语文个人研修计划书
  13. 拓端tecdat|R语言极值分析:分块极大值Block-maxima、阈值超额法threshold excess、广义帕累托分布GPD拟合降水数据时间序列
  14. MATLAB中uigetfile函数使用方法
  15. 多个excel工作簿合并_Excel多工作簿合并,只需一个简单的公式搞定
  16. 基于JAVA出差报销管理系统
  17. t420i升级固态硬盘提升_SSD固态硬盘读写速度测试工具(附SSD性能提升知识干货)...
  18. 稿定设计怎么去除水印?
  19. 从git上克隆的vue项目在本地运行步骤
  20. Hdoj 2190.悼念512汶川大地震遇难同胞——重建希望小学 题解

热门文章

  1. Python3 系列之 编程规范篇
  2. 大二上学期软件工程概论学习进度表(第十二周)
  3. VNC轻松连接远程Linux桌面
  4. mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
  5. 实验 3 简单的分支与循环结构
  6. MSM8909平台 LED背光的控制
  7. Android应用---基于NDK的samples例程hello-jni学习NDK开发
  8. matlab intergral,matlab學習:人臉識別之HOG(Histograms of Oriented Gradients)
  9. wps文字退格会删掉文字_WPS第二行文字前面有大量空白,按退格不会动,只是把上一行末尾的字去掉。...
  10. 【数据结构】B-Tree, B+Tree, B*树介绍