二叉树的遍历

来源:互联网 发布:java语言图形界面 编辑:程序博客网 时间:2024/06/15 12:24

二叉树的前序,中序,后序遍历


package bintreetraverse;



import java.util.LinkedList;
import java.util.List;


public class BinTreeTraversal {
private int[] array = {1,2,3,4};
private static List<Node> nodeList = null;
/**
* 定义一个Node节点,有左孩子,右孩子,数据域
* @author zhangxin
*
*/
private static class Node{
Node leftChild;
Node rightChild;
int data;
Node(int newData){
leftChild = null;
rightChild = null;
data = newData;
}
}
/**
* 创建二叉树
*/
public void createBinTree(){
nodeList = new LinkedList<Node>();
for(int i=0;i<array.length;i++){
//把所有的节点先加入到LinkedList中。
nodeList.add(new Node(array[i]));
}
/**
* 建造二叉树结构
*/
for(int i=0;i<array.length/2;i++){
try{
//由于可能发生IndexOutOfBoundsException 所以try catch一下,当然用判断来解决更好
nodeList.get(i).leftChild = nodeList.get(i*2+1);
nodeList.get(i).rightChild = nodeList.get(i*2+2);
}catch(IndexOutOfBoundsException e){
}
}
}
/**
* 先序遍历
*/
  public void preOrderTraverse(Node node){
  if(node == null){
  return;
  }
  System.out.print(node.data+" ");
  preOrderTraverse(node.leftChild);
  preOrderTraverse(node.rightChild);
  }
/**
* 中序遍历
* @param node
*/
public void inOrderTraverse(Node node){
if(node == null){
return;
}
inOrderTraverse(node.leftChild);
System.out.print(node.data);
inOrderTraverse(node.rightChild);
}
/**
* 后序遍历
* @param node
*/
public void postOrderTraverse(Node node){
if(node == null){
return;
}
postOrderTraverse(node.leftChild);
postOrderTraverse(node.rightChild);
System.out.print(node.data);
}
/**
* 显示当前的链表,和二叉树结构没有关系,
* 当前链表  维护者一个链表结构和 一个二叉树结构
*/
public void disPlay(){
for(int i=0;i<nodeList.size();i++){
System.out.print(nodeList.get(i).data);
}

}
/**
* @param args
*/
public static void main(String[] args) {
BinTreeTraversal b=new BinTreeTraversal();
b.createBinTree();
//获取根节点
Node node = nodeList.get(0);
//前序遍历
b.preOrderTraverse(node);
System.out.println();
//中序遍历
b.inOrderTraverse(node);
System.out.println();
//后序遍历
b.postOrderTraverse(node);
System.out.println();
//显示链表值,和二叉树结构没有关系
b.disPlay();
}


}