最近看了一下二叉排序樹的建立,自己寫了一段**,用來建立二叉排序樹,給定乙個陣列,對這個陣列中的數字進行建立二叉排序樹。分兩種情況:
1 陣列中的數字是隨機的,也就是說沒有順序 eg : int a [ ] = ,用這個陣列中的數字建立二叉排序樹,注意這裡的二叉排序樹是隨便的,沒有特殊的要求(比如建立高度最小的二叉排序樹),可知二叉排序樹是不唯一的。常規方法採用遞迴,首先先以3這個數字為根節點,僅接著採用遞迴,大於根節點的在右子樹中,小於等於根節點的在左子樹中。二叉排序樹結構圖:
以上構建的二叉排序樹的演算法**如下:
1.1使用遞迴構造排序二叉樹的方法:
public tree sortbinarytree(tree node,int i)
else
else
return node;
} }
1.2 使用上方方法,進行構建:
int shuzu = ;
tree tree = realtree.new tree(shuzu[0]); //以3這個數為根節點
for( int i = 1 ; i < shuzu.length ; i ++)
**很簡單,邏輯清晰,如果覺得不保險,可用中序遍歷遍歷一遍,二叉排序樹的中序遍歷是遞增的。
2 第2種情況,如果給定乙個隨機的陣列,我們需要建立乙個高度最小的二叉排序樹,我們應該怎麼做:
首先,把給定的隨機數組排個序,以公升序的方式進行排序,ok,這個排序演算法的**就不寫了。
然後 , 構造高度最小的二叉排序樹,高度最小意味著左子樹和右子樹的高度基本相等,所以我們會想,首先我們以排序好的陣列的中間數為根節點,然後中間數的左邊是左子樹,右邊是右子樹,然後在對中間數的左邊的數再取中間數以它為上乙個根節點的左子樹,依次類推,來構建。
還是以上面的陣列進行 a = 進行公升序排序後為 a[ ] = ,二叉排序樹結構圖:中間數為3以它為根節點:結構圖如下:
2.1 最小高度的二叉排序樹結構圖所對應的演算法**如下:
public tree createminheighttree(int a , int start , int end )
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);
以上就是兩種構建排序二叉樹的方法,如果**有錯,請告知,或者方法笨拙,還有更好的方法,可以互相討論。 java實現二叉排序樹
二叉排序樹 非空左子樹的所有鍵值小於其根節點的鍵值 非空右子數的所有鍵值大於其根節點的鍵值 左右子數都是二叉排序樹 建立先是建立一棵樹 然後進行新增節點 比根節點小那麼就放到左子樹 在進行遞迴 比根節點大那麼就放到右子數 在進行遞迴 public void add node node if node...
建立二叉排序樹
建立二叉排序樹 1 建立二叉排序樹,二叉樹排序樹有個特點,如果結點值大於根,則在右子樹去查詢插入位置,如果小於樹根,在左子樹去查詢樹根,如果相等,不作任何操作 2 根據上面的特性,需要兩個結點,分別是當前結點和父節點 3 先遍歷二叉樹節點,找到要插入的位置,根據父節點的指向要插入的位置 實現過程如下...
JAVA 二叉排序樹
二叉排序樹 二叉檢索樹 author lao yang public class binarysearchtree 插入乙個節點,假如已經存在這個值返回 false 否則true param value 節點值 return 插入成功與否 public boolean insert int valu...