二叉树遍历算法实现(递归、非递归)
来源:互联网 发布:淘宝小额免密支付 编辑:程序博客网 时间:2024/06/06 12:43
二叉树遍历可采用前序遍历(先根遍历)、中序遍历、后序遍历。具体实现算法包括递归和非递归。
package Tree;import java.util.Stack;/** * * @ClassName: BinaryTree * * @Description: 二叉树相关算法实现 * * @author: ccding * @date: 2017年5月24日 下午8:20:13 * * @param <T> */public class BinaryTree <T extends Comparable <T>> { public TreeNode<T> root;// root node of binary tree //construct method public BinaryTree(TreeNode<T> root){ this.root = root; } /** * 先序遍历递归实现 */ public void preOrderTraverse(TreeNode<T> t){ if(t != null){ System.out.print(t.val+" "); preOrderTraverse(t.left); preOrderTraverse(t.right); } } /** * 先序遍历非递归实现 */ public void preOrderTraverseII(TreeNode<T> t){ Stack<TreeNode<T>> s = new Stack<>(); s.push(t); TreeNode<T> curr = t; while(!s.isEmpty() || curr!=null){ while(curr!=null){ System.out.print(curr.val + " "); s.push(curr); curr = curr.left; } if(!s.isEmpty()){ curr = s.pop(); curr = curr.right; } } } /** * 先序遍历非递归实现 */ public void preOrderTraverseIII(TreeNode<T> t){ Stack<TreeNode<T>> s = new Stack<>(); s.push(t); TreeNode<T> p = null; while(!s.isEmpty()){ p = s.pop(); System.out.print(p.val + " "); if(p.right != null) s.push(p.right); if(p.left != null) s.push(p.left); } } /** * 中序遍历递归实现 */ public void inOrderTraverse(TreeNode<T> t){ if(t != null){ inOrderTraverse(t.left); System.out.print(t.val+" "); inOrderTraverse(t.right); } } /** * 中序遍历非递归实现 */ public void inOrderTraverseII(TreeNode<T> t){ Stack<TreeNode<T>> s = new Stack<>(); TreeNode<T> curr = t; while(!s.isEmpty() || curr!=null){ while(curr != null){ s.push(curr); curr = curr.left; } if(!s.isEmpty()){ curr = s.pop(); System.out.print(curr.val + " "); curr = curr.right; } } } /** * 后序遍历递归实现 */ public void postOrderTraverse(TreeNode<T> t){ if(t != null){ postOrderTraverse(t.left); postOrderTraverse(t.right); System.out.print(t.val+" "); } } /** * 后序遍历非递归实现 */ public void postOrderTraverseII(TreeNode<T> t){ Stack<TreeNode<T>> s1 = new Stack<>(); Stack<TreeNode<T>> s2 = new Stack<>(); s1.push(t); TreeNode<T> curr = null; while(!s1.isEmpty()){ curr = s1.pop(); s2.push(curr); if(curr.left!=null) s1.push(curr.left); if(curr.right != null) s1.push(curr.right); } while(!s2.isEmpty()) System.out.print(s2.pop().val + " "); }}
阅读全文
0 0
- 二叉树遍历算法实现(递归、非递归)
- 算法:C++实现二叉树遍历(递归、非递归)
- 二叉树的递归遍历与非递归算法实现
- 二叉树的递归遍历与非递归算法实现
- 《算法导论》二叉树遍历的递归&非递归实现
- 二叉树遍历(非递归算法)
- 二叉树遍历算法(非递归)
- 二叉树遍历(递归算法和非递归算法)
- 二叉树的遍历(递归实现+非递归实现)
- 二叉树的遍历算法(递归与非递归)
- 二叉树,递归非递归遍历算法(全)
- 二叉树的遍历算法(递归和非递归)
- 算法-二叉树遍历(递归和非递归)
- 【LintCode-66】二叉树的前序遍历(Java实现-递归算法/非递归算法)
- 【LintCode-67】二叉树的中序遍历(Java实现-递归算法/非递归算法)
- 二叉树的遍历(递归,非递归)实现
- 二叉树的遍历(非递归和递归实现)
- 二叉树遍历(递归和非递归实现)
- 如何配置EditPlus中Java运行环境,运行Java程序
- SQL内置函数
- Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
- FutureTask获取线程返回值, 用来获取耗时较长的计算结果
- JS巧妙实现多级菜单中当前菜单不随页面跳转样式而发生变化
- 二叉树遍历算法实现(递归、非递归)
- win7下安装配置opengrok
- 基于 链表 实现通讯录的功能
- HBase架构深入分析(一)
- 双缓冲绘图与SurfaceView(一):双缓冲绘图
- Kafka+storm+hbase<三者集成遇到坑以及解决办法>
- 1003. 我要通过!(20)
- Webbrowser知识点记录(c#研发)
- 线程辅助类(三)--Semaphore