[算法]二叉树的遍历算法Java实现版本(递归/非递归/先序/中序/后序)

  • Post author:
  • Post category:java


直接上代码,一切尽在代码中。本类可以直接使用,可以按照您的用途做简单修改。单元测试部分在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();



版权声明:本文为cdtdx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。