久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

java怎么實現平衡二叉樹

136次閱讀
沒有評論

共計 2999 個字符,預計需要花費 8 分鐘才能閱讀完成。

要實現平衡二叉樹,可以使用紅黑樹或 AVL 樹這樣的自平衡二叉搜索樹。
以下是使用 AVL 樹實現平衡二叉樹的示例代碼:

// AVL 樹節點類
class Node {

????int?val;

????int?height;

????Node?left;

????Node?right;

????Node(int?val)?{

????????this.val?=?val;

????????this.height?=?1;

????} } //?平衡二叉樹類 class?AVLTree?{

????private?Node?root;

????//?獲取節點的高度

????private?int?getHeight(Node?node)?{

????????if?(node?==?null)?{

????????????return?0;

????????}

????????return?node.height;

????}

????//?更新節點的高度

????private?void?updateHeight(Node?node)?{

????????node.height?=?Math.max(getHeight(node.left),?getHeight(node.right))?+?1;

????}

????//?獲取節點的平衡因子

????private?int?getBalanceFactor(Node?node)?{

????????if?(node?==?null)?{

????????????return?0;

????????}

????????return?getHeight(node.left)?-?getHeight(node.right);

????}

????//?右旋操作

????private?Node?rightRotate(Node?node)?{

????????Node?newRoot?=?node.left;

????????node.left?=?newRoot.right;

????????newRoot.right?=?node;

????????updateHeight(node);

????????updateHeight(newRoot);

????????return?newRoot;

????}

????//?左旋操作

????private?Node?leftRotate(Node?node)?{

????????Node?newRoot?=?node.right;

????????node.right?=?newRoot.left;

????????newRoot.left?=?node;

????????updateHeight(node);

????????updateHeight(newRoot);

????????return?newRoot;

????}

????//?平衡節點

????private?Node?balance(Node?node)?{

????????if?(node?==?null)?{

????????????return?null;

????????}

????????updateHeight(node);

????????int?balanceFactor?=?getBalanceFactor(node);

????????if?(balanceFactor?>?1)?{

????????????if?(getBalanceFactor(node.left)?>=?0)?{

????????????????return?rightRotate(node);

????????????}?else?{

????????????????node.left?=?leftRotate(node.left);

????????????????return?rightRotate(node);

????????????}

????????}?else?if?(balanceFactor?<?-1)?{

????????????if?(getBalanceFactor(node.right)?<=?0)?{

????????????????return?leftRotate(node);

????????????}?else?{

????????????????node.right?=?rightRotate(node.right);

????????????????return?leftRotate(node);

????????????}

????????}

????????return?node;

????}

????//?插入節點

????public?void?insert(int?val)?{

????????root?=?insert(root,?val);

????}

????private?Node?insert(Node?node,?int?val)?{

????????if?(node?==?null)?{

????????????return?new?Node(val);

????????}

????????if?(val?<?node.val)?{

????????????node.left?=?insert(node.left,?val);

????????}?else?if?(val?>?node.val)?{

????????????node.right?=?insert(node.right,?val);

????????}?else?{

????????????//?如果樹中已經存在相同值的節點,則不進行插入

????????????return?node;

????????}

????????return?balance(node);

????}

????//?中序遍歷

????public?void?inorderTraversal()?{

????????inorderTraversal(root);

????}

????private?void?inorderTraversal(Node?node)?{

????????if?(node?==?null)?{

????????????return;

????????}

????????inorderTraversal(node.left);

????????System.out.print(node.val?+?"?");

????????inorderTraversal(node.right);

????} } //?測試代碼 public?class?Main?{

????public?static?void?main(String[]?args)?{

????????AVLTree?tree?=?new?AVLTree();

????????tree.insert(3);

????????tree.insert(2);

????????tree.insert(1);

????????

????????tree.inorderTraversal();??//?輸出:1?2?3

????} }

以上是使用 AVL 樹實現平衡二叉樹的示例代碼,其中包含了插入節點、平衡節點和中序遍歷等操作。你可以根據需要進行修改和擴展。

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-12發表,共計2999字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 河间市| 隆回县| 邯郸县| 赣州市| 阿鲁科尔沁旗| 内乡县| 乐安县| 南平市| 武安市| 新竹市| 西乡县| 惠来县| 南溪县| 苍山县| 汪清县| 青龙| 湖北省| 朝阳市| 密山市| 囊谦县| 荔浦县| 安达市| 淳化县| 鹤壁市| 海晏县| 乌兰察布市| 灵武市| 扶风县| 东港市| 启东市| 广宁县| 榕江县| 云南省| 张家川| 贡山| 永善县| 临武县| 咸宁市| 巩义市| 襄垣县| 东乡族自治县|