中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

java平衡二叉樹怎么實現

小億
84
2023-08-01 18:21:08
欄目: 編程語言

Java中可以使用AVL樹來實現平衡二叉樹。AVL樹是一種自平衡二叉搜索樹,它的每個節點的左子樹和右子樹的高度最多相差1。

以下是一個簡單的AVL樹的實現示例:

class Node {
int key, height;
Node left, right;
Node(int value) {
key = value;
height = 1;
}
}
class AVLTree {
Node root;
int height(Node node) {
if (node == null)
return 0;
return node.height;
}
int balanceFactor(Node node) {
if (node == null)
return 0;
return height(node.left) - height(node.right);
}
void updateHeight(Node node) {
node.height = Math.max(height(node.left), height(node.right)) + 1;
}
Node rotateRight(Node y) {
Node x = y.left;
Node T2 = x.right;
x.right = y;
y.left = T2;
updateHeight(y);
updateHeight(x);
return x;
}
Node rotateLeft(Node x) {
Node y = x.right;
Node T2 = y.left;
y.left = x;
x.right = T2;
updateHeight(x);
updateHeight(y);
return y;
}
Node insert(Node node, int key) {
if (node == null)
return new Node(key);
if (key < node.key)
node.left = insert(node.left, key);
else if (key > node.key)
node.right = insert(node.right, key);
else
return node;
updateHeight(node);
int balance = balanceFactor(node);
// Left Left Case
if (balance > 1 && key < node.left.key)
return rotateRight(node);
// Right Right Case
if (balance < -1 && key > node.right.key)
return rotateLeft(node);
// Left Right Case
if (balance > 1 && key > node.left.key) {
node.left = rotateLeft(node.left);
return rotateRight(node);
}
// Right Left Case
if (balance < -1 && key < node.right.key) {
node.right = rotateRight(node.right);
return rotateLeft(node);
}
return node;
}
void preOrder(Node node) {
if (node != null) {
System.out.print(node.key + " ");
preOrder(node.left);
preOrder(node.right);
}
}
public static void main(String[] args) {
AVLTree tree = new AVLTree();
tree.root = tree.insert(tree.root, 10);
tree.root = tree.insert(tree.root, 20);
tree.root = tree.insert(tree.root, 30);
tree.root = tree.insert(tree.root, 40);
tree.root = tree.insert(tree.root, 50);
tree.root = tree.insert(tree.root, 25);
tree.preOrder(tree.root);
}
}

上述示例實現了AVL樹的基本功能,包括插入操作和前序遍歷操作。

注意,這只是一個簡單的示例,實際應用中可能需要更多的功能和優化。

0
淮北市| 宽甸| 吴忠市| 平顶山市| 和田市| 乐安县| 文登市| 海口市| 深州市| 平昌县| 汉源县| 五寨县| 汉寿县| 荃湾区| 苏州市| 达拉特旗| 元阳县| 鹤山市| 苗栗市| 嫩江县| 潮安县| 蓝田县| 衡水市| 吉林市| 鲁山县| 浦城县| 成武县| 郓城县| 饶河县| 虹口区| 门头沟区| 昭苏县| 个旧市| 闽侯县| 高雄县| 楚雄市| 利川市| 万全县| 来宾市| 凤阳县| 梁平县|