java程序二叉树_Java实现简单二叉树
B樹
即二叉搜索樹:
1.所有非葉子結點至多擁有兩個兒子(Left和Right);
2.所有結點存儲一個關鍵字;
3.非葉子結點的左指針指向小于其關鍵字的子樹,右指針指向大于其關鍵字的子樹;
如:
B樹的搜索,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那么就命中;
否則,如果查詢關鍵字比結點關鍵字小,就進入左兒子;如果比結點關鍵字大,就進入
右兒子;如果左兒子或右兒子的指針為空,則報告找不到相應的關鍵字;
如果B樹的所有非葉子結點的左右子樹的結點數目均保持差不多(平衡),那么B樹
的搜索性能逼近二分查找;但它比連續內存空間的二分查找的優點是,改變B樹結構
(插入與刪除結點)不需要移動大段的內存數據,甚至通常是常數開銷;
如:
但B樹在經過多次插入與刪除后,有可能導致不同的結構:
右邊也是一個B樹,但它的搜索性能已經是線性的了;同樣的關鍵字集合有可能導致不同的
樹結構索引;所以,使用B樹還要考慮盡可能讓B樹保持左圖的結構,和避免右圖的結構,也就
是所謂的“平衡”問題;
實際使用的B樹都是在原B樹的基礎上加上平衡算法,即“平衡二叉樹”;如何保持B樹
結點分布均勻的平衡算法是平衡二叉樹的關鍵;平衡算法是一種在B樹中插入和刪除結點的
策略;
public class NodeTree {
int data; //根節點數據
NodeTree left; //左子樹
NodeTree right; //右子樹
public NodeTree() {
super();
}
public NodeTree(int data) { //實例化二叉樹
super();
this.data = data;
left=null;
right=null;
}
public void insert(NodeTree root,int data){
if(data>root.data){ //如果插入的節點大于跟節點
if(root.right==null){//如果右子樹為空,就插入,如果不為空就再創建一個節點
root.right=new NodeTree(data); //就把插入的節點放在右邊
}else{
this.insert(root.right, data);
}
}else{ //如果插入的節點小于根節點
if(root.left==null){ //如果左子樹為空,就插入,如果不為空就再創建一個節點
root.left=new NodeTree(data); //就把插入的節點放在左邊邊
}else{
this.insert(root.left, data);
}
}
}
}
public class NodeQuery {
public static void preOrder(NodeTree root) { // 先根遍歷
if (root != null) {
System.out.print(root.data + "-");
preOrder(root.left);
preOrder(root.right);
}
}
public static void inOrder(NodeTree root) { // 中根遍歷
if (root != null) {
inOrder(root.left);
System.out.print(root.data + "--");
inOrder(root.right);
}
}
public static void postOrder(NodeTree root) { // 后根遍歷
if (root != null) {
postOrder(root.left);
postOrder(root.right);
System.out.print(root.data + "---");
}
}
public static void main(String[] args) {
int[] array = {35,17,39,9,28,65,56,87};
NodeTree root = new NodeTree(array[0]); //創建二叉樹
for(int i=1;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);*/
}
} 上面這個樹的實現,應該是最經典最簡單的了吧;
總結
以上是生活随笔為你收集整理的java程序二叉树_Java实现简单二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql truncate drop_
- 下一篇: Java char所占用的字节_关于un