1. 程式人生 > >二叉排序樹建立(JAVA實現)

二叉排序樹建立(JAVA實現)

      最近看了一下二叉排序樹的建立,自己寫了一段程式碼,用來建立二叉排序樹,給定一個數組,對這個陣列中的數字進行建立二叉排序樹。分兩種情況:

     1  陣列中的數字是隨機的,也就是說沒有順序 eg : int  a [ ] = {3,1,2,5,0,7,9,8} ,用這個陣列中的數字建立二叉排序樹,注意這裡的二叉排序樹是隨便的,沒有特殊的要求(比如建立高度最小的二叉排序樹),可知二叉排序樹是不唯一的。常規方法採用遞迴,首先先以3這個數字為根節點,僅接著採用遞迴,大於根節點的在右子樹中,小於等於根節點的在左子樹中。二叉排序樹結構圖:

   


   以上構建的二叉排序樹的演算法程式碼如下:

  1.1使用遞迴構造排序二叉樹的方法:

public Tree SortBinaryTree(Tree node,int i){


		if(node == null){
			node = new Tree(i);
			return node;
		}
		else{
			if(i <= node.value){

				node.left =  SortBinaryTree(node.left, i);
			}
			else{
				node.right = SortBinaryTree(node.right,i);
			}
			
			return node;
		}

	}
1.2 使用上方方法,進行構建:
                int shuzu []= {3,1,2,5,0,7,9,8};
		Tree tree = realtree.new Tree(shuzu[0]);    //以3這個數為根節點
		for( int i = 1 ; i < shuzu.length ; i ++){

			realtree.SortBinaryTree(tree, shuzu[i]);  
		}
程式碼很簡單,邏輯清晰,如果覺得不保險,可用中序遍歷遍歷一遍,二叉排序樹的中序遍歷是遞增的。

  2 第2種情況,如果給定一個隨機的陣列,我們需要建立一個高度最小的二叉排序樹,我們應該怎麼做:

     首先,把給定的隨機陣列排個序,以升序的方式進行排序,ok,這個排序演算法的程式碼就不寫了。

     然後 , 構造高度最小的二叉排序樹,高度最小意味著左子樹和右子樹的高度基本相等,所以我們會想,首先我們以排序好的陣列的中間數為根節點,然後中間數的左邊是左子樹,右邊是右子樹,然後在對中間數的左邊的數再取中間數以它為上一個根節點的左子樹,依次類推,來構建。

還是以上面的陣列進行 a[] = {3,1,2,5,0,7,9,8}進行升序排序後為 a[ ] = {0,1,2,3,5,7,8,9},二叉排序樹結構圖:中間數為3以它為根節點:結構圖如下:



2.1 最小高度的二叉排序樹結構圖所對應的演算法程式碼如下:

 public  Tree  createminheighttree(int a [] , int start  , int end ){
	    
	   if(end < start){
	     return null;
	   }
	   int min = (start + end) / 2;
	   Tree  tree = new Tree(a[min]);
	   tree.left = createminheighttree(a, start, min -1);
	   tree.right = createminheighttree(a, min+ 1, end);
	   return tree;
  }
2.2 使用上述方法進行構建:
Tree tree = realtree.createminheighttree(shuzu, 0, shuzu.length -1);
以上就是兩種構建排序二叉樹的方法,如果哪裡有錯,請告知,或者方法笨拙,還有更好的方法,可以互相討論。