binary search trees definition of binary search tree a binary tree. each node has a (key, value)...

Post on 16-Dec-2015

251 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Binary Search Trees

Definition Of Binary Search Tree

• A binary tree.• Each node has a (key, value) pair.• For every node x, all keys in the left

subtree of x are smaller than that in x.• For every node x, all keys in the right

subtree of x are greater than that in x.

Example Binary Search Tree20

10

6

2 8

15

40

30

25

Only keys are shown.

ADT bsTree

AbstractDataType bsTree

{Instances

OperationsFind(k)

Insert(p)

Erase(k)

Ascend() // in-order tree traversal

}

The Operation ascend()20

10

6

2 8

15

40

30

25

Do an inorder traversal.

The Operation find(k)20

10

6

2 8

15

40

30

25

The Operation insert()20

10

6

2 8

15

40

30

25

Insert a pair whose key is 35.

35

The Operation insert()

Insert a pair whose key is 7.

20

10

6

2 8

15

40

30

25 35

7

The Operation insert()20

10

6

2 8

15

40

30

25

Insert a pair whose key is 18.

35

7

18

The Operation insert()20

10

6

2 8

15

40

30

25

Complexity of insert() is O(height).

35

7

18

The Operation erase()

Three cases:

Element is in a leaf.

Element is in a degree 1 node (has one child).

Element is in a degree 2 node (has two children).

Erase From A Leaf

Erase a leaf element. key = 7

20

10

6

2 8

15

40

30

25 35

7

18

Erase From A Leaf (contd.)

Erase a leaf element. key = 35

20

10

6

2 8

15

40

30

25 35

7

18

Remove node with one child

• If node n has one child, move n’s child up to take n’s place.

Erase From A Degree 1 Node

Erase from a degree 1 node. key = 15

20

10

6

2 8

15

40

30

25 35

7

18

Erase From A Degree 1 Node (contd.)

Erase from a degree 1 node. key = 15

20

10

6

2 8

18

40

30

25 35

7

Erase From A Degree 1 Node(contd.)

Erase from a degree 1 node. key = 40

20

10

6

2 8

15

40

30

25 35

7

18

Remove node with two children

• If node n has two children, let x be node in n’s right subtree with smallest key,

• Remove x• Replace n’s key with x’s key

20

10 40

Remove node with two children

• If node n has two children, let x be node in n’s left subtree with largest key,

• Remove x• Replace n’s key with x’s key

20

10 40

Erase From A Degree 2 Node

Erase from a degree 2 node. key = 10

20

10

6

2 8

15

40

30

25 35

7

18

Erase From A Degree 2 Node20

10

6

2 8

15

40

30

25

Replace with largest key in left subtree (or smallest in right subtree).

35

7

18

Erase From A Degree 2 Node20

10

6

2 8

15

40

30

25

Replace with largest key in left subtree (or smallest in right subtree).

35

7

18

Erase From A Degree 2 Node20

8

6

2 8

15

40

30

25

Replace with largest key in left subtree (or smallest in right subtree).

35

7

18

Erase From A Degree 2 Node20

8

6

2 8

15

40

30

25

Largest key must be in a leaf or degree 1 node.

35

7

18

Another Erase From A Degree 2 Node

Erase from a degree 2 node. key = 20

20

10

6

2 8

15

40

30

25 35

7

18

Erase From A Degree 2 Node20

10

6

2 8

15

40

30

25

Replace with largest in left subtree.

35

7

18

Erase From A Degree 2 Node20

10

6

2 8

15

40

30

25

Replace with largest in left subtree.

35

7

18

Erase From A Degree 2 Node18

10

6

2 8

15

40

30

25

Replace with largest in left subtree.

35

7

18

Erase From A Degree 2 Node18

10

6

2 8

15

40

30

25 35

7

Exercise

• Start with an empty binary search tree.– Insert the keys 4,12,8,16,6,18,24,2,14,3, draw

the tree following each insert.– From the tree above, delete the keys, 6,14,16,4

in order, draw the search tree following each deletion.

// abstract class bsTree

// abstract data type specification for binary search trees

// all methods are pure virtual functions

// K is key type and E is value type

#ifndef bsTree_

#define bsTree_

#include "dictionary.h"

using namespace std;

template<class K, class E>

class bsTree : public dictionary<K,E>

{

public:

virtual void ascend() = 0;

// output in ascending order of key

};

#endif

top related