26
1 AVL Trees AVL TREES Binary Search Trees AVL Trees

Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

1AVL Trees

AVL T REES

• Binary Search Trees

• AVL Trees

Page 2: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

2AVL Trees

Binary Search Trees• A binary search tree is a binary tree T such that

- each internal node stores an item (k, e) of adictionary.

- keys stored at nodes in the left subtree of v are lessthan or equal to k.

- Keys stored at nodes in the right subtree of v aregreater than or equal to k.

- External nodes do not hold elements but serve asplace holders.

97

44

17 88

32 65

54 8228

29 76

80

Page 3: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

3AVL Trees

Search• The binary search treeT is adecision tree, where the

question asked at an internal nodev is whether thesearch keyk is less than, equal to, or greater than thekey stored atv.

• Pseudocode:Algorithm TreeSeach(k, v):

Input : A search keyk and a nodev of a binary searchtreeT.

Ouput: A node w of the subtreeT(v) of T rooted atv,such that either w is an internal node storingkey k or w is the external node encountered inthe inorder traversal ofT(v) after all the internal nodes with keys smaller thank and beforeall the internal nodes with keys greater thank.

if v is an external nodethenreturn v

if k = key(v) thenreturn v

else ifk < key(v) thenreturn TreeSearch(k, T.leftChild(v))

else{ k > key(v) }return TreeSearch(k, T.rightChild(v))

Page 4: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

4AVL Trees

Search (cont.)• A picture:

97

44

17 88

32 65

54 8228

2976

80

find(76)find(25)

Page 5: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

5AVL Trees

Insertion in a Binary SearchTr ee

• Start by callingTreeSearch(k, T.root()) onT. Letwbe the node returned by TreeSearch

• If w is external, we know no item with keyk isstored inT. We callexpandExternal(w) onT and havew store the item (k, e)

• If w is internal, we know another item with keyk isstored atw. We callTreeSearch(k, rightChild(w)) andrecursively apply this alorithm to the node returnedby TreeSearch.

Page 6: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

6AVL Trees

Insertion in a Binary SearchTree (cont.)

• Insertion of an element with key 78:

97

44

17 88

32 65

54 8228

29 76

80

97

44

17 88

32 65

54 8228

29 76

80

78

a)

b)

Page 7: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

7AVL Trees

Removal from a Binary SearchTr ee

• Removal where the key to remove is stored at a node(w) with an external child:

97

44

17 88

32 65

54 8228

29 76

80

78

(a)

w

Page 8: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

8AVL Trees

Removal from a Binary SearchTree (cont.)

97

44

17 88

65

54 82

28

29

76

80

78

(b)

Page 9: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

9AVL Trees

Removal from a Binary SearchTree (cont.)

• Removal where the key to remove is stroed at a nodewhose children are both internal:

97

44

17 88

65

54 82

28

29

76

80

78

(a)

w

Page 10: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

10AVL Trees

Removal from a Binary SearchTree (cont.)

97

44

17 88

76

54 82

28

29

80

78

(b)

w

Page 11: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

11AVL Trees

Time Complexity• Searching, insertion, and removal in a binary search

tree isO(h), whereh is the height of the tree.

• However, in the worst-case search, insertion, andremoval time isO(n), if the height of the tree isequal ton. Thus in some cases searching, insertion,and removal is no better than in a sequence.

• Thus, to prevent the worst case, we need to developa rebalancing scheme to bound the height of the treeto logn.

Page 12: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

12AVL Trees

AVL Tree• An AVL Tree is a binary search tree such that for

every internal nodev of T, the heights of the childrenof v can differ by at most 1.

• An example of an AVL tree where the heights areshown next to the nodes:

88

44

17 78

32 50

48 62

2

4

1

1

2

3

1

1

Page 13: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

13AVL Trees

Height of an AVL Tree• Proposition: The height of an AVL treeT storingn

keys isO(log n).

• Justification: The easiest way to approach thisproblem is to try to find the minimum number ofinternal nodes of an AVL tree of heighth: n(h).

• We see thatn(1) = 1 andn(2) = 2

• for n 3, an AVL tree of heighth with n(h) minimalcontains the root node, one AVL subtree of heightn-1 and the other AVL subtree of heightn-2.

• i.e.n(h) = 1 +n(h-1) + n(h-2)

• Knowingn(h-1) > n(h-2), we getn(h) > 2n(h-2)- n(h) > 2n(h-2)- n(h) > 4n(h-4)

...- n(h) > 2in(h-2i)

• Solving the base case we get:n(h) 2h/2-1

• Taking logarithms:h < 2logn(h) +2

• Thus the height of an AVL tree isO(log n)

Page 14: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

14AVL Trees

Insertion• A binary search treeT is calledbalancedif for every

nodev, the height ofv’s children differ by at mostone.

• Inserting a node into an AVL tree involvesperforming anexpandExternal(w) onT, whichchanges the heights of some of the nodes inT.

• If an insertion causesT to becomeunbalanced, wetravel up the tree from the newly created node untilwe find the first nodex such that its grandparentz isunbalanced node.

• Sincez became unbalanced by an insertion in thesubtree rooted at its childy,height(y) = height(sibling(y)) + 2

• To rebalance the subtree rooted atz, we mustperform arestructuring- we renamex, y, andz to a, b, andc based on the

order of the nodes in an in-order traversal.- z is replaced byb, whose children are nowa andc

whose children, in turn, consist of the four othersubtrees formerly children ofx, y, andz.

Page 15: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

15AVL Trees

Insertion (contd.)• Example of insertion into an AVL tree.

88

44

17 78

32 50

48 62

2

5

1

1

3

4

2

1

54

1

T0T2

T3

x

y

z

88

44

17

7832 50

48

622

4

1

1

2 2

3

154

1

T0 T1

T2

T3

x

y z

Page 16: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

16AVL Trees

Restructuring• The four ways to rotate nodes in an AVL tree,

graphically represented:

- Single Rotations:

T0T1

T2

T3

c = xb = y

a = z

T0 T1 T2

T3

c = xb = y

a = zsingle rotation

T3T2

T1

T0

a = xb = y

c = z

T0T1T2

T3

a = xb = y

c = zsingle rotation

Page 17: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

17AVL Trees

Restructuring (contd.)

- double rotations:

double rotationa = z

b = xc = y

T0T2

T1

T3 T0T2

T3T1

a = zb = x

c = y

double rotationc = z

b = xa = y

T0T2

T1

T3 T0T2

T3 T1

c = zb = x

a = y

Page 18: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

18AVL Trees

Restructuring (contd.)• In Pseudo-Code:

Algorithm restructure(x):Input:A nodex of a binary search treeT that has both

a parenty and a grandparentzOutput: TreeT restructured by a rotation (either

single or double) involving nodesx, y, andz.

1: Let (a, b, c) be an inorder listing of the nodesx, y,andz, and let (T0, T1, T2, T3) be an inorder listingof the the four subtrees ofx, y, andznot rooted atx,y, orz

2. Replace the subtree rooted atz with a new subtreerooted atb

3. Leta be the left child ofb and let T0, T1 be the leftand right subtrees ofa, respectively.

4. Letc be the right child ofb and let T2, T3 be the leftand right subtrees ofc, respectively.

Page 19: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

19AVL Trees

Removal• We can easily see that performing a

removeAboveExternal(w) can causeT to becomeunbalanced.

• Let zbe the firstunbalancednode encountered whiletravelling up the tree fromw. Also, let y be the childof zwith the larger height, and letx be the child ofywith the larger height.

• We can perform operationrestructure(x) to restorebalance at the subtree rooted atz.

• As this restructuring may upset the balance ofanother node higher in the tree, we must continuechecking for balance until the root ofT is reached.

Page 20: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

20AVL Trees

Removal (contd.)• example of deletion from an AVL tree:

88

44

17

78

32

50

48

621

4

1

2 2

3

154

1T0

T1

T2

T3

z

y

x

0

8817

78

50

48

62

1

1

2

23

1

541

T0

T1

T2

T3

y

x44

4

z

0

Page 21: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

21AVL Trees

Removal (contd.)• example of deletion from an AVL tree

88

44

17

78

32

50

48

621

4

1

2 2

3

154

1T0

T1 T2 T3

z

y

x

0

88

17 78

50

48

621 1

4

2

3

154

1

T0 T1 T2

T3

y

x

0

442

z

Page 22: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

22AVL Trees

Implementation• A Java-based implementation of an AVL tree

requires the following node class:

public class AVLItem extends Item {

int height;

AVLItem(Object k, Object e, int h) {

super (k, e);

height = h;

}

public int height() {

return height;

}

public int setHeight(int h) {

int oldHeight = height;

height = h;

return oldHeight;

}

}

Page 23: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

23AVL Trees

Implementation (contd.)public class SimpleAVLTree

extends SimpleBinarySearchTreeimplements Dictionary {

public SimpleAVLTree(Comparator c) {

super (c);

T = new RestructurableNodeBinaryTree();

}

private int height(Position p) {

if (T.isExternal(p))

return 0;

else

return ((AVLItem) p.element()).height();

}

private void setHeight(Position p) { // called only// if p is internal

((AVLItem) p.element()).setHeight

(1 + Math.max(height(T.leftChild(p)),height(T.rightChild(p))));

}

Page 24: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

24AVL Trees

Implementation (contd.)

private boolean isBalanced(Position p) {// test whether node p has balance factor// between -1 and 1

int bf = height(T.leftChild(p)) - height(T.rightChild(p));

return ((-1 <= bf) && (bf <= 1));

}

private Position tallerChild(Position p) { // return a child of p with height no

// smaller than that of the other child

if (height(T.leftChild(p)) >= height(T.rightChild(p)))

return T.leftChild(p);

else

return T.rightChild(p);

}

Page 25: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

25AVL Trees

Implementation (contd.)

private void rebalance(Position zPos) {//traverse the path of T from zPos to the root;//for each node encountered recompute its//height and perform a rotation if it is//unbalanced

while (!T.isRoot(zPos)) {

zPos = T.parent(zPos);

setHeight(zPos);

if (!isBalanced(zPos)) { // perform a rotation

Position xPos = tallerChild(tallerChild(zPos));

zPos = ((RestructurableNodeBinaryTree)T).restructure(xPos);

setHeight(T.leftChild(zPos));

setHeight(T.rightChild(zPos));

setHeight(zPos);

}

}

}

Page 26: Binary Search Trees • AVL Trees · Binary Search Trees • A binary search tree is a binary tree T such that - each internal node stores an item (k, e) of a dictionary. - keys stored

26AVL Trees

Implementation (contd.)

public void insertItem(Object key, Object element)

throws InvalidKeyException {

super .insertItem(key, element);// may throw an// InvalidKeyException

Position zPos = actionPos; // start at the// insertion position

T.replace(zPos, new AVLItem(key, element, 1));

rebalance(zPos);

}

public Object remove(Object key)

throws InvalidKeyException {

Object toReturn = super .remove(key); // may throw// an InvalidKeyException

if (toReturn != NO_SUCH_KEY) {

Position zPos = actionPos; // start at the // removal position

rebalance(zPos);

}

return toReturn;

}

}