您的位置:首页 > 其它

二叉树系列之二叉树的遍历

2016-11-23 19:22 176 查看
二叉树的遍历:递归法和非递归法

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.Stack;

class TreeNode {
TreeNode left = null;
TreeNode right = null;
int val = 0;
public TreeNode(int val) {
this.val = val;
}
}

//遍历二叉树
public class Ergodic {

//1.先序遍历-递归
public static void preOrderPrint(TreeNode node){
if(node != null){
System.out.print(node.val+" ");
preOrderPrint(node.left);
preOrderPrint(node.right);
}
}

//2.中序遍历-递归
public static void midOrderPrint(TreeNode node){
if(node != null){
midOrderPrint(node.left);
System.out.println(node.val);
midOrderPrint(node.right);
}
}

//3.后序遍历-递归
public static void afterOrderPrint(TreeNode node){
if(node != null){
afterOrderPrint(node.left);
afterOrderPrint(node.right);
System.out.println(node.val);
}
}

//4.先序遍历-非递归版
public static void preNoRecursionOrderPrint(TreeNode node){
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode currNode = node;
while(currNode != null || !stack.isEmpty()){
while(currNode != null){
stack.push(currNode);
System.out.println(currNode.val);
currNode = currNode.left;
}
if(!stack.isEmpty()){
currNode = stack.pop();
currNode = currNode.right;
}
}
}

//5.中序遍历-非递归版
public static void midNoRecursionOrderPrint(TreeNode node){
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode currNode = node;
while(currNode != null || !stack.isEmpty()){
while(currNode != null){
stack.push(currNode);
currNode = currNode.left;
}
if(!stack.isEmpty()){
currNode = stack.pop();
System.out.println(currNode.val);
currNode = currNode.right;
}
}
}

//6.后序遍历-非递归版
public static void afterNoRecursionOrderPrint(TreeNode node){
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode currNode = node;
Set<TreeNode> set =new HashSet<TreeNode>();
while(currNode != null || !stack.isEmpty()){
while(currNode != null){
stack.push(currNode);
set.add(currNode);
currNode = currNode.left;
}
if(!stack.isEmpty()){
currNode = stack.pop();
if(set.contains(currNode)){
boolean b = set.remove(currNode);
stack.push(currNode);
currNode = currNode.right;

}else{
System.out.println(currNode.val);
currNode = null;
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树