package 平衡樹;
public class tree
} //計算高度
public int hi(node t)
public void insert(int element)
public node insert(int data, node rot)
if(data==rot.data)
//用當前值與根節點的值進行比較,建立過程與二叉排序樹的過程相同,平衡樹的建立只是多了旋轉操作
if(datarot.data)else
}
}elseelse
} }elseelse
} }
if(hi(t.leftchild) - hi(t.rightchild) == 2)
} }
//完了之後更新height值
t.height = math.max(hi(t.leftchild), hi(t.rightchild))+1;
}else if(t.leftchild != null && t.rightchild != null)else
}
}elseelse
}
}elseelse
}
} //左子樹自身一定是平衡的,左右失衡的話單旋轉可以解決問題
if(hi(t.leftchild) - hi(t.rightchild) == 2)
} //完了之後更新height值
t.height = math.max(hi(t.leftchild), hi(t.rightchild))+1;
}else
return t;
}//輸出用於除錯
private node findmin(node t)
public node findmax(node rot)
if(rot.rightchild == null)
return findmax(rot.rightchild);
} public node findf(node rrot, node rot)
node temp=findf(rrot.leftchild,rot);
if(temp.data==rot.data)
node node=findf(rrot.rightchild,rot);
if(node.data==rot.data)
return null; }
}class node
/* public node(int v,int h)
public void setbf(int a)
public int getbf()
public void setleftchild(node node)
public node getleftchild()
public void setrightchild(node node)
public node getrightchild()
*/}/* * public int creat_balance_tree(node rooot, int data, boolean taller)else
if(rooot.data>node.data)
if(taller)
}}else
if(taller)}}
} return 1;
} *
* */
package 平衡樹;
public class test ;
int arr = ;
for(int i=0;itree.inorder(tree.root);
tree.remove(120);
tree.inorder(tree.root);
tree.remove(125);
tree.insert(78);
tree.inorder(tree.root);
}}
java實現平衡二叉排序樹增刪
在學習了普通二叉排序樹的演算法之後,我們發現了它的一些不足,如果我們的普通二叉樹在插入資料的時候造成樹的一側資料過多的話,就會使得查詢的時候效率大大降低,在極端情況下,我們插入一串有序的數,原本的二叉樹就會變成鍊錶,例如,插入 1,2,3,4,5,6,結果就會變成下圖這樣 這樣就違背了我們二叉樹的初...
資料結構,java實現平衡二叉樹,AVL樹
之前看hashmap原始碼的時候遇到一些問題,jdk1.8中對hashmap做了一些優化,其中就包括當鍊表節點大於8個時會將鍊錶轉換成紅黑樹以提高查詢效率。我對紅黑樹了解的比較少,而且之前學的二叉樹相關的知識也忘了許多,所以決定近期去複習一下。先回顧一下二叉排序樹的基本知識,在二叉排序樹中,每個節點...
平衡二叉樹 java
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。思路 1 重複遍歷結點 參考上一題求二叉樹的深度,先求出根結點的左右子樹的深度,然後判斷它們的深度相差不超過1,如果否,則不是一棵二叉樹 如果是,再用同樣的方法分別判斷左子樹和右子樹是否為平衡二叉樹,如果都是,則這就是一棵平衡二叉樹。但上面的方法在判斷子...