350 likes | 530 Views
Trees. Tree Terminology. A tree consists of a collection of elements or nodes, with each node linked to its successors The node at the top of a tree is called its root The links from a node to its successors are called branches The successors of a node are called its children
E N D
Tree Terminology • A tree consists of a collection of elements or nodes, with each node linked to its successors • The node at the top of a tree is called its root • The links from a node to its successors are called branches • The successors of a node are called its children • The predecessor of a node is called its parent Chapter 8: Trees
Tree Terminology (continued) • Each node in a tree has exactly one parent except for the root node, which has no parent • Nodes that have the same parent are siblings • A node that has no children is called a leaf node • A generalization of the parent-child relationship is the ancestor-descendent relationship Chapter 8: Trees
Tree Terminology (continued) • A subtree of a node is a tree whose root is a child of that node • The level of a node is a measure of its distance from the root Chapter 8: Trees
Binary Trees • In a binary tree, each node has at most two subtrees • A set of nodes T is a binary tree if either of the following is true • T is empty • Its root node has two subtrees, TL and TR, such that TL and TR are binary trees Chapter 8: Trees
Some Types of Binary Trees • Expression tree • Each node contains an operator or an operand • Huffman tree • Represents Huffman codes for characters that might appear in a text file • Huffman code uses different numbers of bits to encode letters as opposed to ASCII or Unicode • Binary search trees • All elements in the left subtree precede those in the right subtree Chapter 8: Trees
Some Types of Binary Trees (continued) Chapter 8: Trees
Fullness and Completeness • Trees grow from the top down • Each new value is inserted in a new leaf node • A binary tree is full if every node has two children except for the leaves Chapter 8: Trees
General Trees • Nodes of a general tree can have any number of subtrees • A general tree can be represented using a binary tree Chapter 8: Trees
Tree Traversals • Often we want to determine the nodes of a tree and their relationship • Can do this by walking through the tree in a prescribed order and visiting the nodes as they are encountered • This process is called tree traversal • Three kinds of tree traversal • Inorder • Preorder • Postorder Chapter 8: Trees
Tree Traversals (continued) • Preorder: Visit root node, traverse TL, traverse TR • Inorder: Traverse TL, visit root node, traverse TR • Postorder: Traverse TL, Traverse TR, visit root node Chapter 8: Trees
Visualizing Tree Traversals • You can visualize a tree traversal by imagining a mouse that walks along the edge of the tree • If the mouse always keeps the tree to the left, it will trace a route known as the Euler tour • Preorder traversal if we record each node as the mouse first encounters it • Inorder if each node is recorded as the mouse returns from traversing its left subtree • Postorder if we record each node as the mouse last encounters it Chapter 8: Trees
Traversals of Binary Search Trees and Expression Trees • An inorder traversal of a binary search tree results in the nodes being visited in sequence by increasing data value • An inorder traversal of an expression tree inserts parenthesis where they belong (infix form) • A postorder traversal of an expression tree results in postfix form Chapter 8: Trees
The Node Class • Just as for a linked list, a node consists of a data part and links to successor nodes • The data part is a reference to type Object • A binary tree node must have links to both its left and right subtrees Chapter 8: Trees
The BinaryTree Class Chapter 8: Trees
The BinaryTree Class (continued) Chapter 8: Trees
Overview of a Binary Search Tree • Binary search tree definition • A set of nodes T is a binary search tree if either of the following is true • T is empty • Its root has two subtrees such that each is a binary search tree and the value in the root is greater than all values of the left subtree but less than all values in the right subtree Chapter 8: Trees
Searching a Binary Tree Chapter 8: Trees
Class TreeSet and Interface Search Tree Chapter 8: Trees
BinarySearchTree Class Chapter 8: Trees
Insertion into a Binary Search Tree Chapter 8: Trees
Removing from a Binary Search Tree Chapter 8: Trees
Removing from a Binary Search Tree (continued) Chapter 8: Trees
Heaps and Priority Queues • In a heap, the value in a node is les than all values in its two subtrees • A heap is a complete binary tree with the following properties • The value in the root is the smallest item in the tree • Every subtree is a heap Chapter 8: Trees
Removing an Item from a Heap Chapter 8: Trees
Implementing a Heap • Because a heap is a complete binary tree, it can be implemented efficiently using an array instead of a linked data structure • First element for storing a reference to the root data • Use next two elements for storing the two children of the root • Use elements with subscripts 3, 4, 5, and 6 for storing the four children of these two nodes and so on Chapter 8: Trees
Inserting into a Heap Implemented as an ArrayList Chapter 8: Trees
Inserting into a Heap Implemented as an ArrayList (continued) Chapter 8: Trees
Priority Queues • The heap is used to implement a special kind of queue called a priority queue • The heap is not very useful as an ADT on its own • Will not create a Heap interface or code a class that implements it • Will incorporate its algorithms when we implement a priority queue class and Heapsort • Sometimes a FIFO queue may not be the best way to implement a waiting line • A priority queue is a data structure in which only the highest-priority item is accessible Chapter 8: Trees
Insertion into a Priority Queue Chapter 8: Trees
The PriorityQueue Interface • Effectively the same as the Queue interface provided in chapter six Chapter 8: Trees
Design of a HeapPriorityQueue Class Chapter 8: Trees
HeapPQwithComparator Chapter 8: Trees
Huffman Trees • A Huffman tree can be implemented using a binary tree and a PriorityQueue • A straight binary encoding of an alphabet assigns a unique binary number to each symbol in the alphabet • Unicode for example • The message “go eagles” requires 144 bits in Unicode but only 38 using Huffman coding Chapter 8: Trees
Huffman Trees (continued) Chapter 8: Trees