七大經常使用排序算法——二叉樹排序實現

 

二叉排序樹介紹java

二叉排序樹又稱二叉查找樹(Binary Sort Tree / Binary Search Tree),簡單的說就是數據的存放要符合原則:左邊的節點要小於根節點,右邊的節點要大於根節點,儘可能避免相同(相同則左右放均可)。node


學習二叉排序樹,實現「」增刪改查「」都可以很高效率的完成。數組

 

實現思路:ide

    一、建立結點Node(定義三個變量、一個添加方法、一箇中序遍歷方法(先後排序出來的 結果不是有序的))
    
    二、建立二叉樹(定義一個根節點、添加添加方法、添加遍歷方法)
    
    三、建立實例、循環遞歸添加數組、使用中序遍歷方法輸出post

 

測試代碼:學習

public class BinarySortTree {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int arr [] = {2,5,3,7,4,8,9,1,0};
		BinaryTree binaryTree = new BinaryTree();
		
		//遞歸添加數組
		for(int i = 0; i < arr.length; i++) {
			binaryTree.add(new TreeNode(arr[i]));
		}
		
		//遍歷輸出
		System.out.println("中序遍歷輸出~~");
		binaryTree.postOrder();
		
	}

}
//建立二叉樹
class BinaryTree{
	
	private TreeNode root;
	
//	public BinaryTree(Node root) {
//		this.root = root;
//	}

	//添加方法
	public void add(TreeNode node) {
		if(root == null) {
			root = node;
		} else {
			this.root.add(node);
		} 
	}
	
	//遍歷方法
	public void postOrder() {
		if(root != null) {
			this.root.postOrder();
		} else {
			System.out.println("二叉樹爲空,沒法遍歷排序");
		}
	}
}


//建立節點
class TreeNode{
	private int value;
	private TreeNode left;
	private TreeNode right;
	
	public TreeNode(int value) {
		this.value = value;
	}
	
	@Override
	public String toString() {
		return "TreeNode [value=" + value + "]";
	}

	//添加方法
	public void add(TreeNode node) {
		//判斷傳入的值和當前節點的值的關係
		//若是傳入的值爲空,則直接返回
		if(node == null) {
			return;
		}
		//若是傳入的值小於當前的值
		if(node.value < this.value) {
			//判斷當前節點的左子數是否爲空,爲空則將小於當前節點的值放置在左節點
			if(this.left == null) {
				this.left = node;
			//若當前節點的左子結點不爲空,則提櫃判斷左子樹
			} else {
				this.left.add(node);
			}
		//若是傳入的值不小於當前的值,就表示大於或等於當前的值,則將其添加到當前節點的右邊
		} else {
			if(this.right == null) {
				this.right = node;
			} else {
				this.right.add(node);
			}
		}
	}
	
	//後序遍歷
	public void postOrder() {
		
		if(this.left != null) {
			this.left.postOrder();
		}
		System.out.println(this);
		if(this.right != null) {
			this.right.postOrder();
		}
		
	}
}
相關文章
相關標籤/搜索