Presentation is loading. Please wait.

Presentation is loading. Please wait.

Trees, Binary Trees, and Binary Search Trees COMP171.

Similar presentations


Presentation on theme: "Trees, Binary Trees, and Binary Search Trees COMP171."— Presentation transcript:

1 Trees, Binary Trees, and Binary Search Trees COMP171

2 2 Trees * Linear access time of linked lists is prohibitive n Does there exist any simple data structure for which the running time of most operations (search, insert, delete) is O(log N)? * Trees n Basic concepts n Tree traversal n Binary tree n Binary search tree and its operations

3 3 Trees * A tree T is a collection of nodes n T can be empty n (recursive definition) If not empty, a tree T consists of  a (distinguished) node r (the root),  and zero or more nonempty subtrees T 1, T 2,...., T k

4 4 * Tree can be viewed as a ‘nested’ lists * Tree is also a graph …

5 5 Some Terminologies * Child and Parent n Every node except the root has one parent n A node can have an zero or more children * Leaves n Leaves are nodes with no children * Sibling n nodes with same parent

6 6 More Terminologies * Path n A sequence of edges * Length of a path n number of edges on the path * Depth of a node n length of the unique path from the root to that node * Height of a node n length of the longest path from that node to a leaf n all leaves are at height 0 * The height of a tree = the height of the root = the depth of the deepest leaf * Ancestor and descendant n If there is a path from n1 to n2 n n1 is an ancestor of n2, n2 is a descendant of n1 n Proper ancestor and proper descendant

7 7 Example: UNIX Directory

8 8 Example: Expression Trees * Leaves are operands (constants or variables) * The internal nodes contain operators * Will not be a binary tree if some operators are not binary

9 9 Tree Traversal * Used to print out the data in a tree in a certain order * Pre-order traversal n Print the data at the root n Recursively print out all data in the leftmost subtree n … n Recursively print out all data in the rightmost subtree

10 10 Preorder, Postorder and Inorder * Preorder traversal n node, left, right n prefix expression  ++a*bc*+*defg

11 11 Preorder, Postorder and Inorder * Postorder traversal n left, right, node n postfix expression  abc*+de*f+g*+ * Inorder traversal n left, node, right n infix expression  a+b*c+d*e+f*g

12 12 Example: Unix Directory Traversal PreOrderPostOrder

13 13 Preorder, Postorder and Inorder Pseudo Code

14 14 Binary Trees * A tree in which no node can have more than two children * The depth of an “average” binary tree is considerably smaller than N, even though in the worst case, the depth can be as large as N – 1. Generic binary tree Worst-case binary tree

15 15 Convert a Generic Tree to a Binary Tree

16 16 Binary Tree ADT * Possible operations on the Binary Tree ADT n Parent, left_child, right_child, sibling, root, etc * Implementation n Because a binary tree has at most two children, we can keep direct pointers to them n a linked list is physically a pointer, so is a tree. * Define a Binary Tree ADT later …

17 17 template class BinaryTreeNode { Comparable element; // the data BinaryTreeNode* left; // left child BinaryTreeNode* right; // right child public: BinaryTreeNode getleft () { return left; } BinaryTreeNode getright () { return right; } }; template void preorder (BinaryTreeNode *root) { if (!root){ // output the node preorder (root->getleft()); preorder (root->getright()); } A Binary Tree Node

18 18 Binary Search Trees (BST) * A data structure for efficient searching, inser- tion and deletion * Binary search tree property n For every node X n All the keys in its left subtree are smaller than the key value in X n All the keys in its right subtree are larger than the key value in X

19 19 Binary Search Trees A binary search tree Not a binary search tree

20 20 Binary Search Trees * Average depth of a node is O(log N) * Maximum depth of a node is O(N) The same set of keys may have different BSTs

21 21 Searching BST * If we are searching for 15, then we are done. * If we are searching for a key < 15, then we should search in the left subtree. * If we are searching for a key > 15, then we should search in the right subtree.

22 22

23 23 Searching (Find) * Find X: return a pointer to the node that has key X, or NULL if there is no such node * Time complexity: O(height of the tree)

24 24 Inorder Traversal of BST * Inorder traversal of BST prints out all the keys in sorted order Inorder: 2, 3, 4, 6, 7, 9, 13, 15, 17, 18, 20

25 25 findMin/ findMax * Goal: return the node containing the smallest (largest) key in the tree * Algorithm: Start at the root and go left (right) as long as there is a left (right) child. The stopping point is the smallest (largest) element * Time complexity = O(height of the tree)

26 26 Insertion * Proceed down the tree as you would with a find * If X is found, do nothing (or update something) * Otherwise, insert X at the last spot on the path traversed * Time complexity = O(height of the tree)

27 27 void insert(double x, BinaryNode*& t) { if (t==NULL) t = new BinaryNode(x,NULL,NULL); else if (x element) insert(x,t->left); else if (t->element right); else ; // do nothing }

28 28 Deletion * When we delete a node, we need to consider how we take care of the children of the deleted node. n This has to be done such that the property of the search tree is maintained.

29 29 Deletion under Different Cases * Case 1: the node is a leaf n Delete it immediately * Case 2: the node has one child n Adjust a pointer from the parent to bypass that node

30 30 Deletion Case 3 * Case 3: the node has 2 children n Replace the key of the node with the minimum element at the right subtree n Delete that node with minimum element  Has either no child or only right child because if otherwise, that node would not have been the minimum in the first place! So, invoke case 1 or 2. * Time complexity = O(height of the tree)

31 31 void remove(double x, BinaryNode*& t) { if (t==NULL) return; // empty tree or not found if (x element) remove(x,t->left); else if (t->element right); else if (t->left != NULL && t->right != NULL) // two children { t->element = finMin(t->right) ->element; remove(t->element,t->right); } else { Binarynode* oldNode = t; t = (t->left != NULL) ? t->left : t->right; delete oldNode; }

32 32 Make a binary or BST ADT …

33 33 Struct Node { double element; // the data Node* left; // left child Node* right; // right child } class Tree { public: Tree(); // constructor Tree(const Tree& t); ~Tree(); // destructor bool empty() const; double root(); // decomposition (access functions) Tree& left(); Tree& right(); void insert(const double x); // compose x into a tree void remove(const double x); // decompose x from a tree private: Node* root; } update access, selection For a generic (binary) tree: (insert and remove are different from those of BST)

34 34 Struct Node { double element; // the data Node* left; // left child Node* right; // right child } class BST { public: BST(); // constructor BST(const Tree& t); ~BST(); // destructor bool empty() const; double root(); // decomposition (access functions) BST left(); BST right(); bool serch(const double x); // search an element void insert(const double x); // compose x into a tree void remove(const double x); // decompose x from a tree private: Node* root; } update access, selection For BST tree (non-template version) BST is for efficient search, insertion and removal, so restricting these functions.

35 35 class BST { public: BST(); BST(const Tree& t); ~BST(); bool empty() const; bool search(const double x); // contains void insert(const double x); // compose x into a tree void remove(const double x); // decompose x from a tree private: Struct Node { double element; Node* left; Node* right; Node(…) {…}; // constructuro for Node } Node* root; void insert(const double x, Node*& t) const; // recursive function void remove(…) Node* findMin(Node* t); void makeEmpty(Node*& t); // recursive ‘destructor’ bool contains(const double x, Node* t) const; } Weiss textbook:


Download ppt "Trees, Binary Trees, and Binary Search Trees COMP171."

Similar presentations


Ads by Google