您的位置:首页 > 编程语言 > Java开发

二叉树的三种排序Java实现

2015-07-27 19:48 531 查看
package test3;

import java.util.LinkedList;

import java.util.List;

public class BinTreeTraverse {

   private int []array={1,5,6,66,88,456,223,20,693,123};

   private static List<Node> nodeList=null;

   

   class Node{ 
  Node leftChild;
  Node rightChild;
  int data;
  Node(int data){ 
  leftChild=null;
  rightChild=null;
  data=data;
  }

   }

   

   public void createBinTree(){ 
  nodeList=new LinkedList<Node>();
  for(int nodeIndex=0; nodeIndex<array.length;nodeIndex++){ 
  nodeList.add(new Node(array[nodeIndex]));
  }
  for(int parentIndex=0;parentIndex<array.length/2-1;parentIndex++){ 
  nodeList.get(parentIndex).leftChild = nodeList  

                   .get(parentIndex * 2 + 1);  

           // 右孩子  

           nodeList.get(parentIndex).rightChild = nodeList  

                   .get(parentIndex * 2 + 2);  
  }
  int lastParentIndex = array.length / 2 - 1;  
  nodeList.get(lastParentIndex).leftChild = nodeList  

               .get(lastParentIndex * 2 + 1);  

       // 右孩子,如果数组的长度为奇数才建立右孩子  

       if (array.length % 2 == 1) {  

           nodeList.get(lastParentIndex).rightChild = nodeList  

                   .get(lastParentIndex * 2 + 2);  

       }  

   }

   /** 

    * 先序遍历 

    *  

    * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已 

    *  

    * @param node 

    *            遍历的节点 

    */  

   public static void preOrderTraverse(Node node) {  

       if (node == null)  

           return;  

       System.out.print(node.data + " ");  

       preOrderTraverse(node.leftChild);  

       preOrderTraverse(node.rightChild);  

   }  

 

   /** 

    * 中序遍历 

    *  

    * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已 

    *  

    * @param node 

    *            遍历的节点 

    */  

   public static void inOrderTraverse(Node node) {  

       if (node == null)  

           return;  

       inOrderTraverse(node.leftChild);  

       System.out.print(node.data + " ");  

       inOrderTraverse(node.rightChild);  

   }  

 

   /** 

    * 后序遍历 

    *  

    * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已 

    *  

    * @param node 

    *            遍历的节点 

    */  

   public static void postOrderTraverse(Node node) {  

       if (node == null)  

           return;  

       postOrderTraverse(node.leftChild);  

       postOrderTraverse(node.rightChild);  

       System.out.print(node.data + " ");  

   }  

 

   public static void main(String[] args) {  

       BinTreeTraverse binTree = new BinTreeTraverse();  

       binTree.createBinTree();  

       // nodeList中第0个索引处的值即为根节点  

       Node root = nodeList.get(0);  

 

       System.out.println("先序遍历:");  

       preOrderTraverse(root);  

       System.out.println();  

 

       System.out.println("中序遍历:");  

       inOrderTraverse(root);  

       System.out.println();  

 

       System.out.println("后序遍历:");  

       postOrderTraverse(root);  

   }  

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: