直接上代码,一切尽在代码中。本类可以直接使用,可以按照您的用途做简单修改。单元测试部分在main函数。转载请著名出处,谢谢。
package com.datastructure.tree;
import java.util.Stack;
/**
* 二叉树的遍历算法Java实现版本(递归/非递归/先序/中序/后序)
*
* Note: 1. 要求JDK5及其以上
*
*
* @author Ciro Deng(
ciro.deng@qq.com
)
* @version 1.0
*
*/
public class TraverseBinTree {
/**
* 首先定义树的类型,使用泛型以保证对不同data类型的兼容.
*
* @param <T>
* 不同data类型
*/
public static class Node<T> {
Node<T> lchild;
Node<T> rchild;
T data;
public Node(Node<T> lchild, Node<T> rchild, T data) {
super();
this.lchild = lchild;
this.rchild = rchild;
this.data = data;
}
@Override
public String toString() {
return data.toString();
}
}
// ===================非递归算法============================//
/**
* 二叉树先序非递归遍历算法。
*
* @param <T>
* 不同data类型
* @param t
* 二叉树的根节点
*/
public static <T> void preOrderUnrecur(Node<T> t) {
if (t == null)
return;
Stack<Node<T>> stack = new Stack<Node<T>>();
stack.push(t);
while (!stack.isEmpty()) {
while (stack.peek() != null) {
System.out.print(stack.peek());
stack.push(stack.peek().lchild);
}
Node<T> p = stack.pop();
if (!stack.isEmpty()) {
p = stack.pop();