二叉树的三种排序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);
}
}
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);
}
}
相关文章推荐
- java中的异常
- 你的Java日志,有没有用这些改进办法
- JAVA学习第十天
- Java调用存储过程返回数组
- JAVA 并发编程-线程池(七)
- 重学java23种设计模式(5)单例模式
- JAVA操作LDAP总结
- 《深入浅出struts2》--第八章,输入验证-内建验证程序required,requiredstring和stringlength
- SSH学习一 STRUTS2 DTO
- java入门相关
- spring中@value注解需要注意
- 重学java23种设计模式(4)原型模式
- java.lang.NumberFormatException: empty String
- 《深入浅出struts2》--第七章,类型转换-支持与Map一起使用
- poj 1001 java大精度
- java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
- 关闭java-8变态的java-doc检查
- 给eclipse配置sublime主题的背景
- Java中的可变参数(来自《Java编程手记》一书)
- Spring综合Struts2