CSC 143 Java Trees.

Slides:



Advertisements
Similar presentations
Chapter 7. Binary Search Trees
Advertisements

Binary Trees Chapter 6. Linked Lists Suck By now you realize that the title to this slide is true… By now you realize that the title to this slide is.
Binary Trees, Binary Search Trees CMPS 2133 Spring 2008.
Binary Trees, Binary Search Trees COMP171 Fall 2006.
CS 171: Introduction to Computer Science II
Trees Chapter 8.
Fall 2007CS 2251 Trees Chapter 8. Fall 2007CS 2252 Chapter Objectives To learn how to use a tree to represent a hierarchical organization of information.
Trees Chapter 8. Chapter 8: Trees2 Chapter Objectives To learn how to use a tree to represent a hierarchical organization of information To learn how.
Trees Chapter 8. Chapter 8: Trees2 Chapter Objectives To learn how to use a tree to represent a hierarchical organization of information To learn how.
© 2006 Pearson Addison-Wesley. All rights reserved11 A-1 Chapter 11 Trees.
Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 19 Binary.
CS21, Tia Newhall Binary Search Trees (BST) 1.Hierarchical data structure with a single pointer to root node 2.Each node has at most two child nodes (a.
Trees CS /02/05 L7: Trees Slide 2 Copyright 2005, by the authors of these slides, and Ateneo de Manila University. All rights reserved Definition.
Trees Chapter 8. 2 Tree Terminology A tree consists of a collection of elements or nodes, organized hierarchically. The node at the top of a tree is called.
Chapter 19: Binary Trees. Objectives In this chapter, you will: – Learn about binary trees – Explore various binary tree traversal algorithms – Organize.
Trees Chapter 15 Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013.
CS Data Structures Chapter 15 Trees Mehmet H Gunes
Binary Trees Chapter Definition And Application Of Binary Trees Binary tree: a nonlinear linked list in which each node may point to 0, 1, or two.
Trees Chapter 8. Chapter 8: Trees2 Chapter Objectives To learn how to use a tree to represent a hierarchical organization of information To learn how.
Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.
Binary Trees 2 Overview Trees. Terminology. Traversal of Binary Trees. Expression Trees. Binary Search Trees.
Tree (new ADT) Terminology:  A tree is a collection of elements (nodes)  Each node may have 0 or more successors (called children)  How many does a.
Trees Chapter 8. 2 Tree Terminology A tree consists of a collection of elements or nodes, organized hierarchically. The node at the top of a tree is called.
Computer Science: A Structured Programming Approach Using C Trees Trees are used extensively in computer science to represent algebraic formulas;
Binary Search Tree Traversal Methods. How are they different from Binary Trees?  In computer science, a binary tree is a tree data structure in which.
CS-2852 Data Structures LECTURE 11 Andrew J. Wozniewicz Image copyright © 2010 andyjphoto.com.
Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy Walters, and Godfrey Muganda Modified for use at Midwestern State University Chapter.
Topics Definition and Application of Binary Trees Binary Search Tree Operations.
1 Chapter 7 Objectives Upon completion you will be able to: Create and implement binary search trees Understand the operation of the binary search tree.
M180: Data Structures & Algorithms in Java Trees & Binary Trees Arab Open University 1.
Binary Search Trees (BST)
Trees Chapter 10. CS 308 2Chapter Trees Preview: Preview: The data organizations presented in previous chapters are linear, in that items are one.
Copyright © 2012 Pearson Education, Inc. Chapter 20: Binary Trees.
Copyright © 2015, 2012, 2009 Pearson Education, Inc., Publishing as Addison-Wesley All rights reserved. Chapter 20: Binary Trees.
CMSC 202, Version 5/02 1 Trees. CMSC 202, Version 5/02 2 Tree Basics 1.A tree is a set of nodes. 2.A tree may be empty (i.e., contain no nodes). 3.If.
BINARY TREES Objectives Define trees as data structures Define the terms associated with trees Discuss tree traversal algorithms Discuss a binary.
(c) University of Washington20c-1 CSC 143 Binary Search Trees.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 20: Binary Trees.
(c) University of Washington20-1 CSC 143 Java Trees.
TREES From root to leaf. Trees  A tree is a non-linear collection  The elements are in a hierarchical arrangement  The elements are not accessible.
Binary Search Trees Chapter 7 Objectives
Data Structures and Design in Java © Rick Mercer
Trees Chapter 15.
Data Structure and Algorithms
Fundamentals of Programming II Introduction to Trees
Recursive Objects (Part 4)
Binary Search Tree (BST)
Tree.
Section 8.1 Trees.
Trees.
Data Structures & Algorithm Design
ITEC 2620M Introduction to Data Structures
Binary Trees, Binary Search Trees
Chapter 20: Binary Trees.
Data Structures and Database Applications Binary Trees in C#
Chapter 21: Binary Trees.
Binary Trees.
Chapter 7. Trees & Binary Trees
General Trees & Binary Trees
Binary Trees.
Binary Trees, Binary Search Trees
Trees Chapter 10.
CSC 143 Binary Search Trees.
Trees.
Chapter 20: Binary Trees.
Binary Trees.
Trees.
Binary Trees, Binary Search Trees
Data Structures Using C++ 2E
Chapter 11 Trees © 2011 Pearson Addison-Wesley. All rights reserved.
Presentation transcript:

CSC 143 Java Trees

Overview Topics Trees: Definitions and terminology Binary trees Tree traversals Binary search trees Applications of BSTs

Trees Most of the structures we’ve looked at so far are linear Arrays Linked lists There are many examples of structures that are not linear, e.g. hierarchical structures Organization charts Book contents (chapters, sections, paragraphs) Class inheritance diagrams Trees can be used to represent hierarchical structures

Looking Ahead To An Old Goal Finding algorithms and data structures for fast searching A key goal Sorted arrays are faster than unsorted arrays, for searching Can use binary search algorithm Not so easy to keep the array in order LinkedLists were faster than arrays (or ArrayLists), for insertion and removal operations The extra flexibility of the "next" pointers avoided the cost of sliding But... LinkedLists are hard to search, even if sorted Is there an analogue of LinkedLists for sorted collections?? The answer will be...Yes: a particular type of tree!

Tree Definitions A tree is a collection of nodes connected by edges A node contains Data (e.g. an Object) References (edges) to two or more subtrees or children Trees are hierarchical A node is said to be the parent of its children (subtrees) There is a single unique root node that has no parent Nodes with no children are called leaf nodes Nodes with at least one child are branch nodes A tree with no nodes is said to be empty

Drawing Trees For whatever reason, computer sciences trees are normally drawn upside down: root at the top

Tree Terminology root branch node edges leaves c g a b j k f e h i d l

Subtrees A subtree in a tree is any node in the tree together with all of its descendants (its children, and their children, recursively) Note: note every subset is a subtree! a b c g j k m

Level and Height level 1 level 2 level 3 Definition: The root has level 1 Children have level 1 greater than their parent Definition: The height is the highest level of a tree. c g a b j k f e h i d l m leaves (not all at same level) level 2 level 3 level 1

Binary Trees A binary tree is a tree each of whose nodes has no more than two children The two children are called the left child and right child The subtrees belonging to those children are called the left subtree and the right subtree a b j f e d h g i k Left child Right child

Binary Tree Implementation A node for a binary tree holds the item and references to its subtrees public class BTNode<E> { public E item; // data item in this node public BTNode left; // left subtree, or null if none public BTNode right; // right subtree, or null if none public BTNode(E item, BTNode left, BTNode right) { … } } The whole tree can be represented just by a pointer to the root node, or null if the tree is empty public class BinaryTree { private BTNode root; // root of tree, or null if empty public BinTree( ) { this.root = null; } …

Tree Algorithms The definition of a tree is naturally recursive: A tree is either null, or data + left (sub-)tree + right (sub-)tree Base case(s)? Recursive case(s)? Given a recursively defined data structure, recursion is often a very natural technique for algorithms on that data structure Don’t fight it!

A Typical Tree Algorithm: size( ) public class BinTree { … /** Return the number of items in this tree */ public int size( ) { return subtreeSize(root); } // Return the number of nodes in the (sub-)tree with root n private int subtreeSize(BTNode n) { if (n == null) { return 0; } else { return 1 + subtreeSize(n.left) + subtreeSize(n.right); Check that the recursive method subtreeSize has: 1) base case(s) 2) recursive case(s), which match the structure of the recursive type 3) check base cases first 4) have "smaller" recursive subproblems

Tree Traversal Functions like subtreeSize systematically “visit” each node in a tree This is called a traversal We also used this word in connection with lists Traversal is a common pattern in many algorithms The processing done during the “visit” varies with the algorithm What order should nodes be visited in? Many are possible Three have been singled out as particularly useful for binary trees: preorder, postorder, and inorder

Traversals Preorder traversal: Postorder traversal: Inorder traversal: “Visit” the (current) node first i.e., do what ever processing is to be done Then, (recursively) do preorder traversal on its children, left to right Postorder traversal: First, (recursively) do postorder traversals of children, left to right Visit the node itself last Inorder traversal: (Recursively) do inorder traversal of left child Then visit the (current) node Then (recursively) do inorder traversal of right child Footnote: pre- and postorder make sense for all trees; inorder only for binary trees This section on pre/in/post order traversal was distracting from the main flow of building sets out of binary search trees. I would cut it next time.

Example of Tree Traversal In what order are the nodes visited, if we start the process at the root? 9 5 2 7 4 6 8 1 12 17 l1 13 Preorder: 9, 5, 2, 1, 4, 7, 6, 8, 12, 17, 11, 13 Inorder: 1, 2, 4, 5, 6, 7, 8, 9, 17, 11, 12, 13 Postorder: 1, 4, 2, 6, 8, 7, 5, 11, 17, 13, 12, 9

More Practice What about this tree? 6 3 1 4 2 5 8 7 l3 10 11 12 Preorder: 6, 3, 1, 2, 4, 5, 8, 7, 10, 13, 11, 12 Inorder: 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13 Postorder: 2, 1, 5, 4, 3, 7, 12, 11, 13, 10, 8, 6

New Algorithm: contains Return whether or not a value is an item in the tree public class BinaryTree { … /** Return whether elem is in tree */ public boolean contains(Object elem) { return subtreeContains(root, elem); } // Return whether elem is in (sub-)tree with root n private boolean subtreeContains(BTNode n, Object elem) { if (n == null) { return false; } else if (n.item.equals(elem)) { return true; } else { return subtreeContains(n.left, elem) || subtreeContains(n.right, elem);

Test contains(d) contains(c) a b j f e d h g i k

Cost of contains Work done at each node: O(1) Number of nodes visited: N Total cost: O(N)