Presentation is loading. Please wait.

Presentation is loading. Please wait.

Tree traversals BST properties Search Insertion

Similar presentations


Presentation on theme: "Tree traversals BST properties Search Insertion"— Presentation transcript:

1 Tree traversals BST properties Search Insertion
Binary Search Trees Tree traversals BST properties Search Insertion October 30, 2017 Hassan Khosravi / Geoffrey Tien

2 Hassan Khosravi / Geoffrey Tien
Binary tree traversal A traversal algorithm for a binary tree visits each node in the tree Typically, it will do something while visiting each node! Traversal algorithms are naturally recursive There are three traversal methods inOrder preOrder postOrder October 30, 2017 Hassan Khosravi / Geoffrey Tien

3 inOrder traversal algorithm
void inOrder(BNode* nd) { if (nd != NULL) inOrder(nd->left); visit(nd); inOrder(nd->right); } typedef struct BNode { int data; struct BNode* left; struct BNode* right; } BNode; The visit function would do whatever the purpose of the traversal is (e.g. print the data value of the node). October 30, 2017 Hassan Khosravi / Geoffrey Tien

4 Hassan Khosravi / Geoffrey Tien
preOrder traversal visit(nd); preOrder(nd->left); 1 preOrder(nd->right); 17 2 6 visit visit 13 27 preOrder(left) preOrder(left) preOrder(right) preOrder(right) 3 5 7 8 visit visit visit 9 16 20 39 preOrder(left) preOrder(left) preOrder(left) preOrder(right) preOrder(right) preOrder(right) visit 4 preOrder(left) preOrder(right) 11 visit preOrder(left) preOrder(right) October 30, 2017 Hassan Khosravi / Geoffrey Tien

5 Hassan Khosravi / Geoffrey Tien
postOrder traversal postOrder(nd->left); postOrder(nd->right); 8 visit(nd); 17 4 7 postOrder(left) postOrder(left) 13 27 postOrder(right) postOrder(right) visit visit 2 3 5 6 postOrder(left) postOrder(left) postOrder(left) 9 16 20 39 postOrder(right) postOrder(right) postOrder(right) visit visit visit postOrder(left) 1 postOrder(right) visit postOrder(left) 11 postOrder(right) visit October 30, 2017 Hassan Khosravi / Geoffrey Tien

6 Hassan Khosravi / Geoffrey Tien
Exercise What will be printed by an in-order traversal of the tree? preOrder? postOrder? inOrder(nd->left); 17 visit(nd); inOrder(nd->right); 9 27 6 16 20 31 Food for thought: which traversal will be useful for copying a tree? Deallocating all nodes? 12 39 October 30, 2017 Hassan Khosravi / Geoffrey Tien

7 Before we begin... Another type of tree traversal We have seen pre-order, in-order, post-order traversals What about a traversal that visits every node in a level before working on the next level? level-order traversal 41 33 87 21 74 36 45 78 25 Use some ADT to support this? October 30, 2017 Hassan Khosravi / Geoffrey Tien

8 Binary search trees A data structure for the Dictionary ADT? A binary search tree is a binary tree with a special property For all nodes in the tree: All nodes in a left subtree have labels less than the label of the subtree's root All nodes in a right subtree have labels greater than or equal to the label of the subtree's root Binary search trees are fully ordered October 30, 2017 Hassan Khosravi / Geoffrey Tien

9 Hassan Khosravi / Geoffrey Tien
BST example 17 13 27 9 16 20 39 11 October 30, 2017 Hassan Khosravi / Geoffrey Tien

10 Hassan Khosravi / Geoffrey Tien
BST inOrder traversal inOrder(nd->leftchild); inOrder traversal on a BST retrieves data in sorted order visit(nd); 5 inOrder(nd->rightchild); 17 3 7 inOrder(left) inOrder(left) 13 27 visit visit inOrder(right) inOrder(right) 1 4 6 8 inOrder(left) inOrder(left) inOrder(left) 9 visit 16 20 visit 39 visit inOrder(right) inOrder(right) inOrder(right) inOrder(left) 2 visit inOrder(right) inOrder(left) 11 visit inOrder(right) October 30, 2017 Hassan Khosravi / Geoffrey Tien

11 Hassan Khosravi / Geoffrey Tien
BST implementation Binary search trees can be implemented using a reference structure Tree nodes contain data and two pointers to nodes BNode* leftchild data BNode* rightchild Data to be stored in the tree (usually an object) References or pointers to other tree Nodes October 30, 2017 Hassan Khosravi / Geoffrey Tien

12 Hassan Khosravi / Geoffrey Tien
BST search To find a value in a BST search from the root node: If the target is less than the value in the node search its left subtree If the target is greater than the value in the node search its right subtree Otherwise return true, (or a pointer to the data, or …) How many comparisons? One for each node on the path Worst case: height of the tree + 1 October 30, 2017 Hassan Khosravi / Geoffrey Tien

13 Hassan Khosravi / Geoffrey Tien
BST search example search(27); 17 27 October 30, 2017 Hassan Khosravi / Geoffrey Tien

14 Hassan Khosravi / Geoffrey Tien
BST search example search(16); 17 13 16 October 30, 2017 Hassan Khosravi / Geoffrey Tien

15 Hassan Khosravi / Geoffrey Tien
BST search example search(12); 17 13 9 11 October 30, 2017 Hassan Khosravi / Geoffrey Tien

16 Search implementation
Search can be implemented iteratively or recursively int search(BNode* nd, int key) { if (nd == NULL) return FALSE; else if (nd->data == key) return TRUE; else { if (key < nd->data) return search(nd->left, key); else return search(nd->right, key); } October 30, 2017 Hassan Khosravi / Geoffrey Tien

17 Hassan Khosravi / Geoffrey Tien
BST insertion The BST property must hold after insertion Therefore the new node must be inserted in the correct position This position is found by performing a search If the search ends at the (null) left child of a node make its left child refer to the new node If the search ends at the right child of a node make its right child refer to the new node The cost is about the same as the cost for the search algorithm, O(height) October 30, 2017 Hassan Khosravi / Geoffrey Tien

18 Hassan Khosravi / Geoffrey Tien
BST insertion example Insert 43 47 Create new node Find position 32 63 Link node 19 41 54 79 43 10 23 37 44 53 59 96 7 12 30 43 57 91 97 October 30, 2017 Hassan Khosravi / Geoffrey Tien

19 Hassan Khosravi / Geoffrey Tien
BST insertion example Create new BST 3 Insert 3 Insert 15 15 Insert 21 Insert 23 21 Insert 37 Search 45 23 How many operations for Search? Complexity? 37 October 30, 2017 Hassan Khosravi / Geoffrey Tien

20 Insert implementation
Insert can also be implemented iteratively or recursively BNode* insert(BNode* nd, int key) { if (nd == NULL) { BNode* newnode = (BNode*) malloc(sizeof(BNode)); newnode->data = key; newnode->left = NULL; newnode->right = NULL; return newnode; } else { if (key < nd->data) nd->left = insert(nd->left, key); else nd->right = insert(nd->right, key); return nd; October 30, 2017 Hassan Khosravi / Geoffrey Tien

21 Hassan Khosravi / Geoffrey Tien
Find Min, Find Max Find minimum: From the root, keep following left child links until no more left child exists (i.e. NULL) Find maximum: From the root, follow right child links until no more right child exists 43 18 68 12 7 9 33 52 56 67 27 39 50 21 October 30, 2017 Hassan Khosravi / Geoffrey Tien

22 Hassan Khosravi / Geoffrey Tien
Exercise Write iterative implementations for: // returns TRUE or FALSE int search(BNode* nd, int key) // returns the root of the subtree receiving the // inserted item BNode* insert(BNode* nd, int key) // returns the value of the minimum key int findMin(BNode* nd) // returns the value of the maximum key int findMax(BNode* nd) October 30, 2017 Hassan Khosravi / Geoffrey Tien

23 Readings for this lesson
Thareja Chapter 9.4 10.1 – , – , – Next class: Thareja Chapter October 30, 2017 Hassan Khosravi / Geoffrey Tien


Download ppt "Tree traversals BST properties Search Insertion"

Similar presentations


Ads by Google