1 5 linked structures based on levent akın’s cmpe160 lecture slides 3 binary trees

94
1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

Upload: clement-tate

Post on 03-Jan-2016

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

1

5Linked Structures

Based on Levent Akın’s CmpE160 Lecture Slides

3

Binary Trees

Page 2: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

2

Owner Jake

Manager Chef Brad Carol

Waitress Waiter Cook Helper Joyce Chris Max Len

Jake’s Pizza Shop

Page 3: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

3

Definition of Tree A tree is a finite set of one or more nodes

such that: There is a specially designated node called

the root. The remaining nodes are partitioned into

n>=0 disjoint sets T1, ..., Tn, where each of these sets is a tree.

We call T1, ..., Tn the subtrees of the root.

Definition

Page 4: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

4

Owner Jake

Manager Chef Brad Carol

Waitress Waiter Cook Helper Joyce Chris Max Len

ROOT NODE

A Tree Has a Root Node

Page 5: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

5

Owner Jake

Manager Chef Brad Carol

Waitress Waiter Cook Helper Joyce Chris Max Len

LEAF NODES

Leaf Nodes have No Children

Page 6: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

6

Owner Jake

Manager Chef Brad Carol

Waitress Waiter Cook Helper Joyce Chris Max Len

LEVEL 0

A Tree Has Leaves

Page 7: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

7

Owner Jake

Manager Chef Brad Carol

Waitress Waiter Cook Helper Joyce Chris Max Len

LEVEL 1

Level One

Page 8: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

8

Owner Jake

Manager Chef Brad Carol

Waitress Waiter Cook Helper Joyce Chris Max Len

LEVEL 2

Level Two

Page 9: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

9

Owner Jake

Manager Chef Brad Carol

Waitress Waiter Cook Helper Joyce Chris Max Len

LEFT SUBTREE OF ROOT NODE

A Subtree

Page 10: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

10

Owner Jake

Manager Chef Brad Carol

Waitress Waiter Cook Helper Joyce Chris Max Len

RIGHT SUBTREE OF ROOT NODE

Another Subtree

Page 11: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

11

Terminology

The degree of a node is the number of subtrees of the node

The node with degree 0 is a leaf or terminal node. All other nodes are nonterminals.

The degree of a tree is the maximum degree of the nodes of a tree.

Page 12: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

12

Terminology

A node that has subtrees is the parent of the roots of the subtrees.

The roots of these subtrees are the children of the node.

Children of the same parent are siblings. The ancestors of a node are all the nodes

along the path from the root to the node The height or depth of a tree is the maximum

level of any node in the tree.

Page 13: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

13

Level and Depth

K L

E F

B

G

C

M

H I J

D

A

Level

1

2

3

4

3

2 1 3

2 0 0 1 0 0

0 0 0

1

2 2 2

3 3 3 3 3 3

4 4 4

Sample Tree

Page 14: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

Tree Representations For a tree of degree k (also called a k-ary

tree), we could define a node structure that contains a data field plus k link fields. Advantage: uniform node structure (can

insert/delete nodes without having to change node structure)

Disadvantage: many null link fields

data link 1 link 2 ... link k

Page 15: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

Tree Representations (continued)

In general, for a tree of degree k with n nodes, we know that the total number of link fields in the tree is kn and that exactly n-1 of them are not null. Therefore the number of null links is

kn - (n-1) = (k-1)n + 1.degree proportion of links that are null

2 (n+1)/2n, or about 1/23 (2n+1)/3n, or about 2/34 (3n+1)/4n, or about 3/4

Page 16: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

20

A binary tree is a structure in which:

Each node can have at most two children, and in which a unique path exists from the root to every other node.

The two children of a node are called the left child and the right child, if they exist.

Binary Tree

Page 17: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

21

A Binary Tree

Q

V

T

K S

A E

L

Page 18: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

22

How many leaf nodes?

Q

V

T

K S

A E

L

Page 19: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

23

How many descendants of Q?

Q

V

T

K S

A E

L

Page 20: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

24

How many ancestors of K?

Q

V

T

K S

A E

L

Page 21: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

25

Implementing a Binary Tree with Pointers and Dynamic Data

Q

V

T

K S

A E

L

Page 22: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

26

Node Terminology for a Tree Node

Page 23: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

27

A

B

A

B

A

B C

GE

I

D

H

F

Complete Binary Tree

Skewed Binary Tree

E

C

D

1

2

3

45

Samples of Binary Trees

Page 24: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

28

The maximum number of nodes on level i of a binary tree is 2i-1, i≥1.

The maximum number of nodes in a binary tree of depth k is 2k-1, k ≥ 1.

Prove by induction.

∑i=1

k

2i−1=2k−1

Maximum Number of Nodes in BT

Page 25: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

29

For any nonempty binary tree, T, if n0 is the number of leaf nodes and n2 the number of nodes of degree 2, then n0=n2+1

proof:

Let n and B denote the total number of nodes & branches in T.

Let n0, n1, n2 represent the nodes with no children, single child, and two children respectively.

n= n0+n1+n2, B+1=n, B=n1+2n2 ==> n1+2n2+1= n, n1+2n2+1= n0+n1+n2 ==> n0=n2+1

Relations between Number ofLeaf Nodes and Nodes of Degree 2

Page 26: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

30

Definitions

Full Binary Tree: A binary tree in which all of the leaves are on the same level and every nonleaf node has two children

Page 27: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

31

Definitions (cont.)

Complete Binary Tree: A binary tree that is either full or full through the next-to-last level, with the leaves on the last level as far to the left as possible

Page 28: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

32

Examples of Different Types of Binary Trees

Page 29: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

33

A full binary tree of depth k is a binary tree of depth k having 2 -1 nodes, k ≥ 0.

A binary tree with n nodes and depth k is complete iff its nodes correspond to the nodes numbered from 1 to n in the full binary tree of depth k.

k

A

B C

GE

I

D

H

F

A

B C

GE

K

D

J

F

IH ONML

Full binary tree of depth 4Complete binary tree

Full BT VS Complete BT

Page 30: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

34

A Binary Tree and Its Array Representation

Page 31: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

35

With Array Representation

For any node tree.nodes[index] its left child is in tree.nodes[index*2 + 1]

right child is in tree.nodes[index*2 + 2]

its parent is in tree.nodes[(index – 1)/2].

Page 32: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

36

Sequential representation

AB--C------D--.E

[0][1][2][3][4][5][6][7][8].[15]

[0][1][2][3][4][5][6][7][8]

ABCDEFGHI

A

B

E

C

D

A

B C

GE

I

D

H

F

(1) space waste (2) insertion/deletion problem

Page 33: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

37

typedef struct node *treePointer;

typedef struct node {

ItemType data;

treePointer leftChild;

treePointer rightChild;

};

dataleftChild rightChild

data

leftChild rightChild

Linked Representation

Page 34: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

38

Let L, V, and R stand for moving left, visiting

the node, and moving right. There are six possible combinations of

traversal LVR, LRV, VLR, VRL, RVL, RLV

Adopt convention that we traverse left before right, only 3 traversals remain LVR, LRV, VLR inorder, postorder, preorder

Binary Tree Traversals

Page 35: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

39

+

*

A

*

/

E

D

C

B

Arithmetic Expression Using BT

Page 36: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

40

void inorder(treePointer ptr)

// inorder tree traversal

{

if (ptr!=NULL) {

inorder(ptr->leftChild);

visit(ptr->data);

inorder(ptr->rightChild);

}

}

A / B * C * D + E

Inorder Traversal (recursive version)

Page 37: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

41

void preorder(treePointer ptr)

// preorder tree traversal

{

if (ptr!=NULL) {

visit(ptr->data);

preorder(ptr->leftChild);

preorder(ptr->rightChild);

}

}

+ * * / A B C D E

Preorder Traversal (recursive version)

Page 38: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

42

void postorder(treePointer ptr)

// postorder tree traversal

{

if (ptr!=NULL) {

postorder(ptr->leftChild);

postorder(ptr->rightChild);

visit(ptr->data);

}

}

A B / C * D * E +

Postorder Traversal (recursive version)

Page 39: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

47

+

*

A

*

/

E

D

C

B

inorder traversalA / B * C * D + Einfix expressionpreorder traversal+ * * / A B C D Eprefix expressionpostorder traversalA B / C * D * E +postfix expressionlevel order traversal+ * E * D / C A B

Arithmetic Expression Using BT

Page 40: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

48

A special kind of binary tree in which:

1. Each node contains a distinct data value,

2. The key values in the tree can be compared using “greater than” and “less than”, and

3. The key value of each node in the tree is

less than every key value in its right subtree, and greater than every key value in its left subtree.

A Binary Search Tree (BST) is . . .

Page 41: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

49

Depends on its key values and their order of insertion.

Insert the elements ‘J’ ‘E’ ‘F’ ‘T’ ‘A’ in that order.

The first value to be inserted is put into the root node.

Shape of a binary search tree . . .

‘J’

Page 42: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

50

Thereafter, each value to be inserted begins by comparing itself to the value in the root node, moving left it is less, or moving right if it is greater. This continues at each level until it can be inserted as a new leaf.

Inserting ‘E’ into the BST

‘J’

‘E’

Page 43: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

51

Begin by comparing ‘F’ to the value in the root node, moving left it is less, or moving right if it is greater. This continues until it can be inserted as a leaf.

Inserting ‘F’ into the BST

‘J’

‘E’

‘F’

Page 44: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

52

Begin by comparing ‘T’ to the value in the root node, moving left it is less, or moving right if it is greater. This continues until it can be inserted as a leaf.

Inserting ‘T’ into the BST

‘J’

‘E’

‘F’

‘T’

Page 45: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

53

Begin by comparing ‘A’ to the value in the root node, moving left it is less, or moving right if it is greater. This continues until it can be inserted as a leaf.

Inserting ‘A’ into the BST

‘J’

‘E’

‘F’

‘T’

‘A’

Page 46: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

54

is obtained by inserting

the elements ‘A’ ‘E’ ‘F’ ‘J’ ‘T’ in that order?

What binary search tree . . .

‘A’

Page 47: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

55

obtained by inserting

the elements ‘A’ ‘E’ ‘F’ ‘J’ ‘T’ in that order.

Binary search tree . . .

‘A’

‘E’

‘F’

‘J’

‘T’

Page 48: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

56

Another binary search tree

Add nodes containing these values in this order:

‘D’ ‘B’ ‘L’ ‘Q’ ‘S’ ‘V’ ‘Z’

‘J’

‘E’

‘A’ ‘H’

‘T’

‘M’

‘K’ ‘P’

Page 49: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

57

Is ‘F’ in the binary search tree?

‘J’

‘E’

‘A’ ‘H’

‘T’

‘M’

‘K’

‘V’

‘P’ ‘Z’‘D’

‘Q’‘L’‘B’

‘S’

Page 50: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

58

Class TreeType // Assumptions: Relational operators overloaded class TreeType { public: // Constructor, destructor, copy constructor ... // Overloads assignment ... // Observer functions ... // Transformer functions ... // Iterator pair ... void Print(std::ofstream& outFile) const; private: TreeNode* root; };

Page 51: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

59

bool TreeType::IsFull() const{ NodeType* location; try { location = new NodeType; delete location; return false; } catch(std::bad_alloc exception) { return true; }}

bool TreeType::IsEmpty() const{ return root == NULL;}

Page 52: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

6060

Tree Recursion

CountNodes Version 1 if (Left(tree) is NULL) AND (Right(tree) is

NULL)return 1

else return CountNodes(Left(tree)) +

CountNodes(Right(tree)) + 1

What happens when Left(tree) is NULL?

Page 53: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

6161

Tree Recursion

CountNodes Version 2if (Left(tree) is NULL) AND (Right(tree) is

NULL) return 1else if Left(tree) is NULL

return CountNodes(Right(tree)) + 1else if Right(tree) is NULL

return CountNodes(Left(tree)) + 1else return CountNodes(Left(tree)) +

CountNodes(Right(tree)) + 1 

What happens when the initial tree is NULL?

Page 54: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

6262

Tree Recursion

CountNodes Version 3if tree is NULL

return 0else if (Left(tree) is NULL) AND (Right(tree)

is NULL) return 1else if Left(tree) is NULL

return CountNodes(Right(tree)) + 1else if Right(tree) is NULL

return CountNodes(Left(tree)) + 1else return CountNodes(Left(tree)) +

CountNodes(Right(tree)) + 1

Can we simplify this algorithm?

Page 55: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

63

Tree Recursion

CountNodes Version 4if tree is NULL

return 0else

return CountNodes(Left(tree)) + CountNodes(Right(tree)) + 1

Is that all there is?

Page 56: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

64

// Implementation of Final Versionint CountNodes(TreeNode* tree); // Pototype int TreeType::LengthIs() const// Class member function{ return CountNodes(root);} int CountNodes(TreeNode* tree)// Recursive function that counts the nodes{ if (tree == NULL) return 0; else return CountNodes(tree->left) + CountNodes(tree->right) + 1;}

Page 57: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

65

Retrieval Operation

Page 58: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

66

Retrieval Operation

void TreeType::RetrieveItem(ItemType& item, bool& found)

{

Retrieve(root, item, found);

}

 

void Retrieve(TreeNode* tree,

ItemType& item, bool& found)

{

if (tree == NULL)

found = false;

else if (item < tree->info)

Retrieve(tree->left, item, found);

Page 59: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

67

Retrieval Operation, cont.

else if (item > tree->info)

Retrieve(tree->right, item, found);

else

{

item = tree->info;

found = true;

}

}

Page 60: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

68

The Insert Operation

A new node is always inserted into its appropriate position in the tree as a leaf.

Page 61: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

69

Insertions into a Binary Search Tree

Page 62: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

70

The recursive InsertItem operation

Page 63: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

72

Recursive Insert

void Insert(TreeNode*& tree, ItemType item){ if (tree == NULL) {// Insertion place found. tree = new TreeNode; tree->right = NULL; tree->left = NULL; tree->info = item; } else if (item < tree->info) Insert(tree->left, item); else Insert(tree->right, item); }

Page 64: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

73

Deleting a Leaf Node

Page 65: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

74

Deleting a Node with One Child

Page 66: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

75

Deleting a Node with Two Children

Page 67: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

76

DeleteNode Algorithm

if (Left(tree) is NULL) AND (Right(tree) is NULL)Set tree to NULL

else if Left(tree) is NULL Set tree to Right(tree)else if Right(tree) is NULL

Set tree to Left(tree)else

Find predecessorSet Info(tree) to Info(predecessor)Delete predecessor

Page 68: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

77

Code for DeleteNode

void DeleteNode(TreeNode*& tree){ ItemType data; TreeNode* tempPtr; tempPtr = tree; if (tree->left == NULL) { tree = tree->right; delete tempPtr; } else if (tree->right == NULL){ tree = tree->left; delete tempPtr;} else { GetPredecessor(tree->left, data); tree->info = data; Delete(tree->left, data); }}

Page 69: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

78

Definition of Recursive Delete

Definition: Removes item from tree Size: The number of nodes in the path from the

root to the node to be deleted. Base Case: If item's key matches key in

Info(tree), delete node pointed to by tree.General Case: If item < Info(tree),

Delete(Left(tree), item); else

Delete(Right(tree), item).

Page 70: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

79

Code for Recursive Delete

void Delete(TreeNode*& tree, ItemType item)

{ if (item < tree->info) Delete(tree->left, item); else if (item > tree->info) Delete(tree->right, item); else DeleteNode(tree); // Node found}

Page 71: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

80

Code for GetPredecessor

void GetPredecessor(TreeNode* tree,

ItemType& data)

{

while (tree->right != NULL)

tree = tree->right;

data = tree->info;

}

Why is the code not recursive?

Page 72: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

81

Printing all the Nodes in Order

Page 73: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

82

Function Print

Function Print  Definition: Prints the items in the binary search

tree in order from smallest to largest. Size: The number of nodes in the tree

whose root is tree Base Case: If tree = NULL, do nothing. General Case: Traverse the left subtree in order.

Then print Info(tree). Then traverse the right subtree in order.

Page 74: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

83

Code for Recursive InOrder Print

void PrintTree(TreeNode* tree, std::ofstream& outFile){ if (tree != NULL) { PrintTree(tree->left, outFile); outFile << tree->info; PrintTree(tree->right, outFile); }}

Is that all there is?

Page 75: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

84

Destructor

void Destroy(TreeNode*& tree);TreeType::~TreeType(){ Destroy(root);} void Destroy(TreeNode*& tree){ if (tree != NULL) { Destroy(tree->left); Destroy(tree->right); delete tree; }}

Page 76: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

85

Algorithm for Copying a Tree

if (originalTree is NULL)

Set copy to NULL

else

Set Info(copy) to Info(originalTree)

Set Left(copy) to Left(originalTree)

Set Right(copy) to Right(originalTree)

Page 77: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

86

Code for CopyTree

void CopyTree(TreeNode*& copy, const TreeNode* originalTree){ if (originalTree == NULL) copy = NULL; else { copy = new TreeNode; copy->info = originalTree->info; CopyTree(copy->left, originalTree->left); CopyTree(copy->right, originalTree->right); }}

Page 78: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

87

Inorder(tree)

if tree is not NULLInorder(Left(tree))Visit Info(tree)Inorder(Right(tree))

 To print in alphabetical order

Page 79: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

88

Postorder(tree)

if tree is not NULLPostorder(Left(tree))Postorder(Right(tree))Visit Info(tree)

 Visits leaves first

(good for deletion)

Page 80: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

89

Preorder(tree)

if tree is not NULLVisit Info(tree)Preorder(Left(tree))Preorder(Right(tree))

 Useful with binary trees(not binary search trees)

Page 81: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

90

Three Tree Traversals

Page 82: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

96

InsertItem

Create a node to contain the new item.

Find the insertion place.

Attach new node.

Find the insertion place

FindNode(tree, item, nodePtr, parentPtr);

Page 83: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

97

Using function FindNode to find the insertion point

Page 84: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

98

Using function FindNode to find the insertion point

Page 85: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

99

Using function FindNode to find the insertion point

Page 86: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

100

Using function FindNode to find the insertion point

Page 87: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

101

Using function FindNode to find the insertion point

Page 88: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

102

AttachNewNode

if item < Info(parentPtr) Set Left(parentPtr) to newNodeelse

Set Right(parentPtr) to newNode

Page 89: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

103

AttachNewNode(revised)

if parentPtr equals NULLSet tree to newNode

else if item < Info(parentPtr) Set Left(parentPtr) to newNodeelse

Set Right(parentPtr) to newNode

Page 90: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

104

Code for InsertItem

void TreeType::InsertItem(ItemType item){ TreeNode* newNode; TreeNode* nodePtr; TreeNode* parentPtr; newNode = new TreeNode; newNode->info = item; newNode->left = NULL; newNode->right = NULL; FindNode(root, item, nodePtr, parentPtr); if (parentPtr == NULL) root = newNode; else if (item < parentPtr->info) parentPtr->left = newNode; else parentPtr->right = newNode;}

Page 91: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

105

Code for DeleteItem

void TreeType::DeleteItem(ItemType item){ TreeNode* nodePtr; TreeNode* parentPtr; FindNode(root, item, nodePtr, parentPtr);

if (nodePtr == root) DeleteNode(root); else if (parentPtr->left == nodePtr) DeleteNode(parentPtr->left); else DeleteNode(parentPtr->right);}

Page 92: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

106

PointersnodePtr and parentPtr Are External to the Tree

Page 93: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

107

Pointer parentPtr is External to the Tree, but parentPtr-> left is an Actual Pointer in the Tree

Page 94: 1 5 Linked Structures Based on Levent Akın’s CmpE160 Lecture Slides 3 Binary Trees

108

A Binary Search Tree Stored in an Array with Dummy Values