0% found this document useful (0 votes)
8 views2 pages

BST

Uploaded by

ims
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views2 pages

BST

Uploaded by

ims
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2

class IntegerBST {

static class Node {


Integer key;
Node left, right;
int size;

Node(Integer key) {
this.key = key;
this.size = 1;
}
}

Node root;

IntegerBST() {
root = null;
}

int size(Node node) {


return node == null ? 0 : node.size;
}

void updateSize(Node node) {


if (node != null) {
node.size = 1 + size(node.left) + size(node.right);
}
}

Node put(Node node, Integer key) {


if (node == null) return new Node(key);

int cmp = key.compareTo(node.key);


if (cmp < 0) {
node.left = put(node.left, key);
} else if (cmp > 0) {
node.right = put(node.right, key);
} else {
// Key already exists, update value if needed
// For simplicity, let's assume no value associated with the key
return node;
}

updateSize(node);
return node;
}

Node delete(Node node, Integer key) {


if (node == null) return null;

int cmp = key.compareTo(node.key);


if (cmp < 0) {
node.left = delete(node.left, key);
} else if (cmp > 0) {
node.right = delete(node.right, key);
} else {
if (node.left == null) return node.right;
if (node.right == null) return node.left;
Node t = node;
node = min(t.right);
node.right = deleteMin(t.right);
node.left = t.left;
}

updateSize(node);
return node;
}

Node min(Node x) {
while (x.left != null) x = x.left;
return x;
}

Node deleteMin(Node node) {


if (node.left == null) return node.right;
node.left = deleteMin(node.left);
updateSize(node);
return node;
}

Node rotateLeft(Node node, Integer key) {


Node x = node;
Node y = x.right;

x.right = y.left;
y.left = x;

y.size = x.size;
updateSize(x);

return y;
}

Node rotateRight(Node node, Integer key) {


Node x = node;
Node y = x.left;

x.left = y.right;
y.right = x;

y.size = x.size;
updateSize(x);

return y;
}

void put(Integer key) {


root = put(root, key);
}

void delete(Integer key) {


root = delete(root, key);
}

void

You might also like