[go: up one dir, main page]

0% found this document useful (0 votes)
10 views10 pages

21 Binary Search Tree2

The document discusses the implementation of binary search trees (BST) in the IntTree class, focusing on methods for modifying the tree, including getting the minimum value and removing nodes while maintaining BST properties. It outlines the cases for node removal and emphasizes the importance of tree balance for efficient searching and adding operations. The document also highlights the relationship between tree height and runtime efficiency.

Uploaded by

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

21 Binary Search Tree2

The document discusses the implementation of binary search trees (BST) in the IntTree class, focusing on methods for modifying the tree, including getting the minimum value and removing nodes while maintaining BST properties. It outlines the cases for node removal and emphasizes the importance of tree balance for efficient searching and adding operations. The document also highlights the relationship between tree height and runtime efficiency.

Uploaded by

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

CSE 143

Lecture 21: Binary Search Trees; TreeSet


Recall: x = change(x)
Methods that modify a tree should have the following pattern:
 input (parameter): old state of the node
 output (return): new state of the node

node parameter your return node


before method after
In order to actually change the tree, you must reassign:
node = change(node, parameters);
node.left = change(node.left, parameters);
node.right = change(node.right, parameters);
overallRoot = change(overallRoot, parameters);

2
Exercise
Add a method getMin to the IntTree class that returns the minimum
integer value from the tree. Assume that the elements of the IntTree
constitute a legal binary search tree. Throw a
NoSuchElementException if the tree is empty.
int min = tree.getMin(); // -3
overall root

55

29 87

-3 42 60 91

3
Exercise solution
// Returns the minimum value from this BST.
// Throws a NoSuchElementException if the tree is empty.
public int getMin() {
if (overallRoot == null) {
throw new NoSuchElementException();
}
return getMin(overallRoot);
}

private int getMin(IntTreeNode root) {


if (root.left == null) { overallRoot
return root.data;
} else { 55
return getMin(root.left);
} 29 87
}
-3 42 60 91

4
Exercise
Add a method remove to the IntTree class that removes a given
integer value from the tree, if present. Remove the value in such a way as
to maintain BST ordering.
 tree.remove(73); overall root
 tree.remove(29);
 tree.remove(87); 55
 tree.remove(55);
29 87

42 60 91

36 73

5
Cases for removal 1
1. a leaf: replace with null
2. a node with a left child only: replace with left child
3. a node with a right child only: replace with right child

overall root overall root overall root overall root

55 55 29 42

29 29 42

tree.remove(29);
-3 42 42

tree.remove(-3); tree.remove(55);

6
Cases for removal 2
4. a node with both children: replace with min from right
 (replacing with max from left would also work)

overall root overall root

55 60
tree.remove(55);

29 87 29 87

-3 42 60 91 -3 42 91

7
Exercise solution
// Removes the given value from this BST, if it exists.
public void remove(int value) {
overallRoot = remove(overallRoot, value);
}
private IntTreeNode remove(IntTreeNode root, int value) {
if (root == null) {
return null;
} else if (root.data > value) {
root.left = remove(root.left, value);
} else if (root.data < value) {
root.right = remove(root.right, value);
} else { // root.data == value; remove this node
if (root.right == null) {
return root.left; // no R child; replace w/ L
} else if (root.left == null) {
return root.right; // no L child; replace w/ R
} else {
// both children; replace w/ min from R
root.data = getMin(root.right);
root.right = remove(root.right, root.data);
}
}
return root;
}
8
Searching BSTs
The BSTs below contain the same elements. overall root
 What orders are "better" for searching?
19
overall
root 14
7
overall root 11
4 19
9 9
6 14 7
6 14
9 6
4 7 11 19
11 4
9
Trees and balance
balanced tree: One whose subtrees differ in height by at most 1 and are
themselves balanced.
 A balanced tree of N nodes has a height of ~ log 2 N.
 A very unbalanced tree can have a height close to N.

 The runtime of adding to / searching a


BST is closely related to height. overall root

 Some tree collections (e.g. TreeSet) 9


contain code to balance themselves
as new nodes are added. 6 14

4 8 19

height = 4 7
(balanced)
10

You might also like