1. 程式人生 > >二叉樹建立及各種遍歷的實現

二叉樹建立及各種遍歷的實現

package com.ywx.count;

/**
 * 
 * @author Vashon
 * data:20150323
 * 題目:二叉樹的建立和二叉樹的先序遍歷、中序遍歷、後序遍歷
 */
class BinaryTree{
	int data;  //根節點資料
	BinaryTree left;//左子樹
	BinaryTree right;//右子樹
	
	public BinaryTree(int data){//例項化二叉樹類
		this.data=data;
		left=null;
		right=null;
	}
	public void insert(BinaryTree root,int data){//向二叉樹中插入子節點
		if(data>root.data){  //二叉樹的左節點都比根節點小
			if(root.right==null){
				root.right=new BinaryTree(data);
			}else{
				this.insert(root.right, data);//如果不為null則繼續遞迴插入
			}
		}else{   //二叉樹的右節點都比根節點大
			if(root.left==null){
				root.left=new BinaryTree(data);
			}else{
				this.insert(root.left, data);
			}
		}
	}
}
//當建立好二叉樹類後可以建立二叉樹例項,並實現二叉樹的先根遍歷,中根遍歷,後根遍歷,程式碼如下:

public class BinaryTreePreorder {
	public static void main(String args[]){
		int array[]={12,11,44,21,65,32,89,61,64};
		BinaryTree root=new BinaryTree(array[0]);//建立二叉樹
		for(int i=1;i<array.length;i++){
			root.insert(root, array[i]);//向二叉樹中插入資料
		}
		System.out.println("先根遍歷:");
		preOrder(root);
		System.out.println();
		System.out.println("中根遍歷:");
		inOrder(root);
		System.out.println();
		System.out.println("後根遍歷:");
		postOrder(root);
	}
	//先根遍歷
	public static void preOrder(BinaryTree root){
		if(root!=null){
			System.out.println(root.data+"-");
			preOrder(root.left);
			preOrder(root.right);
		}
	}
	//中根遍歷
	public static void inOrder(BinaryTree root){
		if(root!=null){
			inOrder(root.left);
			System.out.println(root.data+"-");
			inOrder(root.right);
		}
	}
	//後根遍歷
	public static void postOrder(BinaryTree root){
		if(root!=null){
			postOrder(root.left);
			postOrder(root.right);
			System.out.println(root.data+"-");
		}
	}
}