二叉树的前中后序遍历
2016-04-20 18:50
267 查看
下面代码实现了二叉树的前中后序遍历,包括递归和非递归版本:
package binaryTree; import java.util.*; /* * 二叉树的递归与非递归版本 */ public class Traverse { //递归版本 public static void preTraverse(TreeNode node) { if(node == null) return; System.out.println(node.value);//或其他操作 preTraverse(node.left); preTraverse(node.right); } public static void inTraverse(TreeNode node) { if(node == null) return; inTraverse(node.left); System.out.println(node.value);//或其他操作 inTraverse(node.right); } public static void postTraverse(TreeNode node) { if(node == null) return; postTraverse(node.left); postTraverse(node.right); System.out.println(node.value);//或其他操作 } //非递归版本 public static void rePreTraverse(TreeNode node) { if(node == null) return; Stack<TreeNode> stack = new Stack<TreeNode>(); stack.push(node); while(!stack.isEmpty()) { TreeNode tmp = stack.pop(); System.out.println(tmp.value);//或其他操作 if(tmp.right != null) stack.push(tmp.right); if(tmp.left != null) stack.push(tmp.left); } } public static void reInTraverse(TreeNode node) { if(node == null) return; Stack<TreeNode> stack = new Stack<TreeNode>(); while(node != null || !stack.isEmpty()) { if(node != null) { stack.push(node); node = node.left; } else { node = stack.pop(); System.out.println(node.value);//或其他操作 node = node.right; } } } public static void rePostTraverse(TreeNode node) { Stack<TreeNode> s = new Stack<TreeNode>(); TreeNode p = node; //pre标记最近出栈的节点,用于判断是否是p节点的右孩子,如果是的话,就可以访问p节点 TreeNode pre = p; //flag标记是出栈还是继续将左孩子进栈:true标记进栈;false标记出栈; boolean flag = true; while(p!=null || !s.isEmpty()) { if(p!=null && flag) { s.push(p); p = p.left; } else { if(s.isEmpty()) return; p = s.peek(); if(p.right != null && p.right!=pre) { p = p.right; flag = true; } else { p = s.pop(); System.out.println(p.value); flag = false; pre = p; } } } } }
相关文章推荐
- runtime 使用
- 哈夫曼数与哈夫曼编码
- POJ 1426 Find The Mutiple
- python 处理命令行参数
- Swift之 ? , !, as
- 版本管理神器git上手
- java中的clone
- iOS代理设计模式
- 每周一荐:学习ACE一定要看的书
- 协方差矩阵的概念及matlab计算
- android-Junit功能测试
- jquery实现checkbox全选,反选,取消选择
- 人生
- 青春
- 网络数据请求
- Jacobian matrix (雅可比矩阵或者是Jacobian)
- Python学习(17)异常处理
- Python学习(16)File(文件)方法
- [HDOJ2604]Queuing(递推,矩阵快速幂)
- 【Unity】Unity 3D中的内存管理