1 / 36

Lecture 20-21 Trees Chapter 9 of textbook 1. Concepts of trees Types of trees

Lecture 20-21 Trees Chapter 9 of textbook 1. Concepts of trees Types of trees Tree operations, traversal Application of trees. 1. Concepts of Trees.

espinozar
Télécharger la présentation

Lecture 20-21 Trees Chapter 9 of textbook 1. Concepts of trees Types of trees

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lecture 20-21 Trees Chapter 9 of textbook 1. Concepts of trees • Types of trees • Tree operations, traversal • Application of trees

  2. 1. Concepts of Trees • A non-linear data structure represents hierarchical structure of data, with a root and subtrees of children with a parent node, represented as a set of linked nodes. • A tree is recursively defined as a set of one or more nodes where one node is designated as the root of the tree and all the remaining nodes can be partitioned into non-empty sets each of which is a sub-tree of the root. • Each node is a data structure consisting of a value, together with a list of references to child nodes , such that no reference is duplicated, no cycles.

  3. Concepts of Trees Root node, level 0 left left left left left left data data data data data data right right right right right right Left subtree right subtree level 1 level 2 Leaf node

  4. Tree Terms • Edge: It is the line connectinga node N to any of its successors. • path: a sequence of consecutive edges. • In-degreeof a node is the number of edges arriving at that node. • Out-degree of a node is the number of edges leaving that node. • Depth: The depth of a node N is given as the length of the path from the root to the node N. The depth of the root node is zero. • Height: It is the total number of nodes on the path from the root node to the deepest node in the tree. A tree with only a root node has a height of 1.

  5. Tree Terms • Level number: Every node in the binary tree is assigned a level number. The root node is defined to be at level 0. The left and right child of the root node have a level number 1. Similarly, every node is at one level higher than its parents. • Parent: If N has child node N1, then N is called parent node of N1. • Sibling: all nodes that are at the same level and share the same parent are called siblings (brothers) • Ancestor node: any predecessor node on the path from root the node • Descendant node: any successor node on any path from the node to leaf

  6. Tree representation • A tree node can be represented by a strcut struct node {     int data; struct node* left; ……..     struct node* right; }; • A tree is represented by it root node

  7. 2. Types of trees • Types of Trees • General Trees • Forests • Binary Trees • Expression Trees • Tournament Trees  

  8. General Trees • General trees are data structures that store elements hierarchically. • The top node of a tree is the root node and each node, except the root, has a parent. • A node in a general tree (except the leaf nodes) may have zero or more sub-trees. • General trees which have 3 sub-trees per node are called ternary trees. • However, the number of sub-trees for any node may be variable. For example, a node can have 1 sub-tree, whereas some other node can have 3 sub-trees.

  9. Forests • A forest is a disjoint union of trees. A set of disjoint trees (or forest) is obtained by deleting the root and the edges connecting the root node to nodes at level 1. • Every node of a tree is the root of some sub-tree. Therefore, all the sub-trees immediately below a node form a forest. • A forest can also be defined as an ordered set of zero or more general trees. • While a general tree must have a root, a forest on the other hand may be empty because by definition it is a set, and sets can be empty. • We can convert a forest into a tree by adding a single node as the root node of the tree.

  10. Binary Trees 1 ROOT NODE T1 T2 2 3 4 5 6 7 8 9 10 11 12 • A binary tree is a tree such that every node has at most two child nodes. • Every node contains a data element, a "left" pointer which points to the left child, and a "right" pointer which points to the right child. • The root element is pointed by a "root" pointer. • If root = NULL, then it means the tree is empty. R – Root node (node 1) T1- left sub-tree (nodes 2, 4, 5, 8, 9) T2- right sub-tree (nodes 3, 6, 7, 10, 11, 12)

  11. Binary Trees - Key Terms TREE T A B C D E • Similar binary trees: Given two binary trees T and T’ are said to be similar if both these trees have the same structure. F TREE T” G H I J • Copies of binary trees:Two binary trees T and T’ are said to be copies if they have similar structure and same content at the corresponding nodes. TREE T A A TREE T” B C B C E D D E

  12. Complete Binary Trees 1 3 2 4 7 5 6 8 9 10 11 12 13 • A complete binary tree is a binary tree which satisfies two properties. • First, in a complete binary tree every level, except possibly the last, is completely filled. • Second, all nodes appear as far left as possible • In a complete binary tree Tn, there are exactly n nodes and level r of T can have at most 2r nodes. • The formula to find the parent, left child and right child can be given as: • If K is a parent node, then its left child can be calculated as 2 * K and its right child can be calculated as 2 * K + 1. For example, the children of node 4 are 8 (2*4) and 9 (2* 4 + 1). • Similarly, the parent of node K can be calculated as | K/2 |.

  13. Extended Binary Trees • A binary tree T is said to be an extended binary tree (or a 2-tree) if each node in the tree has either no child or exactly two children. • In an extended binary tree nodes that have two children are called internal nodes and nodes that have no child or zero children are called external nodes. In the figure internal nodes are represented using a circle and external nodes are represented using squares. • To convert a binary tree into an extended tree, every empty sub-tree is replaced by a new node. The original nodes in the tree are the internal nodes and the new nodes added are called the external nodes. Extended binary tree Binary tree

  14. Linked Representation of Binary Trees 1 2 3 4 5 6 7 X 8 X X 9 X X 10 X X 11 X X 12 X • In computer’s memory, a binary tree can be maintained either using a linked representation or using sequential representation. • In linked representation of binary tree, every node will have three parts: the data element, a pointer to the left node and a pointer to the right node. So in C, the binary tree is built with a node type given as below. struct node {     struct node* left;     int data;    struct node* right; };

  15. Sequential Representation of Binary Trees 20 35 15 39 12 17 21 36 45 18 16 • Sequential representation of trees is done using a single or one dimensional array. Though, it is the simplest technique for memory representation, it is very inefficient as it requires a lot of memory space. • A sequential binary tree follows the rules given below: • One dimensional array called TREE is used. • The root of the tree will be stored in the first location. That is, TREE[1] will store the data of the root element. • The children of a node K will be stored in location (2*K) and (2*K+1). • The maximum size of the array TREE is given as (2h-1), where h is the height of the tree. • An empty tree or sub-tree is specified using NULL. If TREE[1] = NULL, then the tree is empty.

  16. Tournament Trees a a e a d e g a b c d e f g h • In a tournament tree (also called a selection tree), each external node represents a player and each internal node represents the winner of the match played between the players represented by its children nodes. • These tournament trees are also called winner trees because they are being used to record the winner at each level. • We can also have a loser tree that records the loser at each level.

  17. Linked Representation of Binary Trees 1 2 3 4 5 6 7 X 8 X X 9 X X 10 X X 11 X X 12 X • In computer’s memory, a binary tree can be maintained either using a linked representation or using sequential representation. • In linked representation of binary tree, every node will have three parts: the data element, a pointer to the left node and a pointer to the right node. So in C, the binary tree is built with a node type given as below. struct node {     struct node* left;     int data;    struct node* right; };

  18. 3. Tree operations • Tree traversal, display, print, … • Tree search • Insert node • Delete node • Clean tree • Node count, tree height, leaf count, …

  19. Traversing a Binary Tree • Traversing a binary tree is the process of visiting each node in the tree exactly once in a systematic way. • There are four different algorithms for tree traversals, which differ in the order in which the nodes are visited: • Pre-order • In-order • Post-order • Breadth-first-order

  20. Pre-order • To traverse a non-empty binary tree in preorder, the following operations are performed recursively at each node. • The algorithm starts with the root node of the tree and continues by: • Visiting the root node • Traversing the left subtree • Traversing the right subtree • Implemented by recursive function

  21. Pre-order A B C E G F D Pre-order A, B, D, E, C, G, F

  22. Pre-order Implementation • Implement by recursive function Example void print_preorder(node *root) { if (root) { printf("%d ", root->data); print_preorder(root->left); print_preorder(root->right); } } time complexity? space complexity ?

  23. In-order • To traverse a non-empty binary tree in in-order, the following operations are performed recursively at each node. • The algorithm starts with the root node of the tree and continues by, • Traversing the left subtree • Visiting the root node • Traversing the right subtree

  24. In-order A B C E G F D In-order: D, B, E, A, G, C, F

  25. In-order Implementation • Implement by recursive function Example void print_inorder(node *root) { if (root) { print_inorder(root->left); printf("%d ", root->data); print_inorder(root->right); } } time complexity? space complexity ?

  26. Post-order • To traverse a non-empty binary tree in post-order, the following operations are performed recursively at each node. • The algorithm starts with the root node of the tree and continues by, • Traversing the left subtree • Traversing the right subtree • Visiting the root node • Implemented by recursive function

  27. Post-order A B C E G F D Post-order: D, E, B, G, F, C, A

  28. post-order Implementation • Implement by recursive function Example void print_postorder(node *root) { if (root) { print_postorder(root->left); print_postorder(root->right); printf("%d ", root->data); } } time complexity? space complexity ?

  29. Breadth-first-order • Visit every node on a level before going to a lower level, broadened as much as possible on each depth before going to the next depth. • Implemented by queue data structure A B C E G F D Breath-first-order: A, B, C, D, E, G, F

  30. Node count • Divide and Conquer • Get the node counts of subtrees, sum + 1 int node_count(node *root) { if (root == NULL) return 0; return 1 + node_count(root->left) + node_count(root->right); } time complexity? space complexity ?

  31. Breadth-first-order Implementation struct queue_node { struct tree_node* tnode; struct queue_node *next; }; • Need to use queue for the breadth-first traversal void print_bfs_order(node *root) { if (root == NULL) return; qnode *front = NULL, *rear = NULL; rear = enqueue(rear, tree); front = rear; while (front) { if ( front-> tnode ) { printf("%d ", front->tnode->data); rear = enqueue(rear, front->tnode->left); rear = enqueue(rear, front->tnode->right); front = dequeue(front); } else { front = dequeue(front); } } } time complexity? space complexity ? struct queue_node { node* tnode; struct queue_node *next; }; typedef struct quene_node qnode;

  32. Tree search • Search tree is to find a node with matched key value. • Algorithms: traverse the tree and return the matched node if found • Depth-first search (DFS): deepened search as much as possible on each child before going to the next sibling. • Use traversal algorithms: pre-order, in-order, post-order • Implemented by recursive function • Breadth-first search (BFS): visit every node on a level before going to a lower level, broadened as much as possible on each depth before going to the next depth. • Implemented by queue data structure Check class example for implementations

  33. 4. Applications of Trees • Trees are used to store simple as well as complex data. Here simple means an int value, char value and complex data (structure). • Trees are often used for implementing other types of data structures like hash tables, sets, and maps. • A self-balancing tree, Red-black tree is used in kernel scheduling to preempt massively multi-processor computer operating system use. • Another variation of tree, B-trees are used to store tree structures on disc. They are used to index a large number of records.

  34. Applications of Trees • B-trees are also used for secondary indexes in databases, where the index facilitates a select operation to answer some range criteria. • Trees are used for compiler construction. • Trees are also used in database design. • Trees are used in file system directories. • Trees are also widely used for information storage and retrieval in symbol tables.

  35. Expression Trees • Binary trees can be used to store algebraic expressions. expression exp = (a – b ) + ( c * d) • This expression can be represented using a binary tree • The infix expression (a – b ) + ( c * d) can be derived by in-order traversal, add ( at left, add ) at right • Postfix expression a b - c d* + derived by post-order traversal • Prefix expression + - a b * c dderived by pre-order traversal + - * b c d a

  36. Huffman Tree • Huffman coding is an entropy encoding algorithm developed by David A. Huffman that is widely used as a lossless data compression technique. • The Huffman coding algorithm uses a variable length code table to encode a source character where the variable-length code table is derived on the basis of the estimated probability of occurrence of the source character. The idea of Huffman algorithm is to encode the frequently used characters using shorter strings. Examplesymbol Frequency Huffman code A 24 0 B 12 100 C 10 101 D 8 110 E 8 111 BADDEC ?

More Related