二叉树的前中后序遍历
来源:互联网 发布:运营商网络攻击 编辑:程序博客网 时间:2024/04/30 13:08
下面代码实现了二叉树的前中后序遍历,包括递归和非递归版本:
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; } } }}}
0 0
- 二叉树的前中后序遍历
- 二叉树的前中后序遍历
- 二叉树的前中后序遍历
- 二叉树的前中后序遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- java中的clone
- POJ 1426 Find The Mutiple
- Swift之 ? , !, as
- python 处理命令行参数
- 【Android 开发】SufaceView自定义相机拍照
- 二叉树的前中后序遍历
- runtime 使用
- 【Redis图形管理工具】
- JDK帮助文档无法打开的常见问题和解决办法
- android studio、java安装及环境变量配置
- 安卓开发——实现canvas.drawText文字水平且垂直居中
- POJ 3126 Prime Path
- View的相关问题
- Intel HD Graphics