非递归实现前序遍历,和中序遍历查不多,只是输出条件改变下,实现过程如下所示:
package cn.edu.nwu.structs.tree;
import java.util.Stack;
/**
* @author jcm
* 前序遍历二叉树
* 时间 2016年9月3日
*/
public class PreOrderBinaryTree {
public static void main(String[] args) {
BinaryTreeNode root = CreateBinaryTree.createBinaryTree();
System.out.println("递归实现前序遍历");
preOrder(root);
System.out.println();
System.out.println("非递归实现前序遍历");
preOrderRecursion(root);
}
/**
* 递归实现前序遍历
* @param root
*/
public static void preOrder(BinaryTreeNode root){
if(root == null){
return ;
}
System.out.print(root.data+" ");
if(root.leftTreeNode != null){
preOrder(root.leftTreeNode);
}
if(root.rightTreeNode != null){
preOrder(root.rightTreeNode);
}
}
/**
* @author jcm
* 非递归实现前序遍历
* @param root
*/
public static void preOrderRecursion(BinaryTreeNode root){
if(root == null){
return ;
}
Stack<BinaryTreeNode> stack = new Stack<BinaryTreeNode>();
BinaryTreeNode currentTNode = root;
while(!stack.isEmpty() || currentTNode != null){
while(currentTNode != null){
System.out.print(currentTNode.data+" ");
stack.push(currentTNode);
currentTNode = currentTNode.leftTreeNode;
}
if(!stack.isEmpty()){
currentTNode = stack.peek();
stack.pop();
currentTNode = currentTNode.rightTreeNode;
}
}
}
}