二叉树非递归遍历方法
来源:互联网 发布:cellsens软件 编辑:程序博客网 时间:2024/05/22 17:29
直接上代码
import java.util.LinkedList;class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}public class erchashubianli { // 递归前序遍历 public static void preOrder1(TreeNode node) { if (node == null) return; System.out.print(node.val + " "); postOrder1(node.left); postOrder1(node.right); } // 非递归前序遍历 public static void preOrder2(TreeNode node) { LinkedList<TreeNode> list = new LinkedList<>(); TreeNode p = node; while (p != null || !list.isEmpty()) { while (p != null) { System.out.print(p.val + " "); list.add(p); p = p.left; } if (!list.isEmpty()) { p = list.removeLast(); p = p.right; } } } // 递归中序遍历 public static void midOrder1(TreeNode node) { if (node == null) return; midOrder1(node.left); System.out.print(node.val + " "); midOrder1(node.right); } // 非递归中序遍历 public static void midOrder2(TreeNode node) { LinkedList<TreeNode> list = new LinkedList<>(); TreeNode p = node; while (p != null || !list.isEmpty()) { while (p != null) { list.add(p); p = p.left; } if (!list.isEmpty()) { p = list.removeLast(); System.out.print(p.val + " "); p = p.right; } } } // 递归后序遍历 public static void postOrder1(TreeNode node) { if (node == null) return; postOrder1(node.left); postOrder1(node.right); System.out.print(node.val + " "); } // 非递归后序遍历 public static void postOrder2(TreeNode node) { class Temp { boolean isFirst; TreeNode node; public Temp(TreeNode node, boolean isFirst) { // TODO Auto-generated constructor stub this.isFirst = isFirst; this.node = node; } } LinkedList<Temp> list = new LinkedList<>(); TreeNode p = node; while (p != null || !list.isEmpty()) { while (p != null) { Temp tmp = new Temp(p, true); list.add(tmp); p = p.left; } if (!list.isEmpty()) { Temp tmp = list.removeLast(); if (tmp.isFirst) { p = tmp.node.right; tmp.isFirst = false; list.add(tmp); } else { p = null; System.out.print(tmp.node.val + " "); } } } } public static void main(String[] args) { TreeNode node1 = new TreeNode(1); TreeNode node2 = new TreeNode(2); TreeNode node3 = new TreeNode(3); TreeNode node4 = new TreeNode(4); TreeNode node5 = new TreeNode(5); TreeNode node6 = new TreeNode(6); node1.left = node2; node1.right = node3; node2.left = node4; node2.right = node5; node5.right = node6; // 递归前序遍历 preOrder1(node1); // 非递归前序遍历 System.out.println(); preOrder2(node1); // 递归中序遍历 System.out.println(); midOrder1(node1); // 非递归中序遍历 System.out.println(); midOrder2(node1); // 递归后序遍历 System.out.println(); postOrder1(node1); // 非递归后序遍历 System.out.println(); postOrder2(node1); }}
阅读全文
0 0
- 二叉树的非递归遍历方法
- 非递归的方法遍历二叉树
- 二叉树非递归遍历方法总结
- 非递归遍历二叉树的方法
- 二叉树的非递归遍历方法
- 二叉树非递归遍历方法
- 二叉树的遍历方法(递归,非递归)
- 二叉树递归与非递归遍历的方法
- 非递归和递归方法遍历二叉树
- 二叉树的遍历 -- 递归和非递归方法
- 二叉树遍历,递归和非递归方法
- 二叉树的递归和非递归遍历方法
- 遍历二叉树的全部方法(递归+非递归)
- java二叉树的遍历,递归与非递归方法
- 二叉树的递归和非递归遍历方法
- 递归及非递归二叉树遍历方法
- 非递归遍历二叉树
- 二叉树遍历非递归
- 设计模式-命令模式-command-python
- Nginx的Session一致性
- 关于ntp时间同步理论及配置参数20170804
- 常用的接口对接
- bootstrap导出table数据到excel
- 二叉树非递归遍历方法
- 获取python包的路径
- POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化)
- 密码显示和隐藏
- webservice配置-cxf
- 源码剖析——LinkedHashMap
- Hbase单机安装部署
- Spring 事务
- xiaoxin juju needs help