Building Java Programs

Slides:



Advertisements
Similar presentations
S. Sudarshan Based partly on material from Fawzi Emad & Chau-Wen Tseng
Advertisements

CSE 143 Lecture 18 Binary Trees read slides created by Marty Stepp and Hélène Martin
CSE 143 Lecture 19 Binary Trees read slides created by Marty Stepp
CS 206 Introduction to Computer Science II 02 / 11 / 2009 Instructor: Michael Eckmann.
CSE 143 Lecture 19 Binary Search Trees read 17.3 slides created by Marty Stepp
Building Java Programs Binary Search Trees reading: 17.3 – 17.4.
Version TCSS 342, Winter 2006 Lecture Notes Trees Binary Trees Binary Search Trees.
Building Java Programs Chapter 17 Binary Trees. 2 Creative use of arrays/links Some data structures (such as hash tables and binary trees) are built around.
1 Trees Tree nomenclature Implementation strategies Traversals –Depth-first –Breadth-first Implementing binary search trees.
Building Java Programs Binary Search Trees; TreeSet.
CMSC 341 Introduction to Trees. 8/3/2007 UMBC CMSC 341 TreeIntro 2 Tree ADT Tree definition  A tree is a set of nodes which may be empty  If not empty,
CSE 143 Lecture 18 Binary Trees read slides created by Marty Stepp
Binary Search Trees Nilanjan Banerjee. 2 Goal of today’s lecture Learn about Binary Search Trees Discuss the first midterm.
CS-2852 Data Structures LECTURE 11 Andrew J. Wozniewicz Image copyright © 2010 andyjphoto.com.
Building Java Programs Binary Trees reading: 17.1 – 17.3.
CSE 143 Lecture 21 Binary Search Trees, continued read slides created by Marty Stepp
CMSC 341 Introduction to Trees. 2/21/20062 Tree ADT Tree definition –A tree is a set of nodes which may be empty –If not empty, then there is a distinguished.
CSE 143 Lecture 19 Binary Trees read slides created by Marty Stepp
1 Trees What is a Tree? Tree terminology Why trees? What is a general tree? Implementing trees Binary trees Binary tree implementation Application of Binary.
BINARY TREES Objectives Define trees as data structures Define the terms associated with trees Discuss tree traversal algorithms Discuss a binary.
CSE 373 Data Structures and Algorithms Lecture 9: Set ADT / Trees.
CSE 143 Lecture 20 Binary Search Trees read 17.3 slides created by Marty Stepp
1 CMSC 341 Introduction to Trees Textbook sections:
Trees Saurav Karmakar
Lecture 19: Binary Trees reading: 17.1 – 17.3
CSE 143 Lecture 20 Binary Search Trees continued; Tree Sets
CSE 373 Binary search trees; tree height and balance
CMSC 341 Introduction to Trees 8/3/2007 CMSC 341 Tree Intro.
Data Structures and Design in Java © Rick Mercer
Recursive Objects (Part 4)
Building Java Programs
Binary Search Tree (BST)
Binary Trees "The best time to plant a tree is twenty years ago. The second best time is now." -Chinese proverb Real programmmers always confuse Christmas.
Trees.
CMSC 341 Introduction to Trees.
Trees What is a Tree? Tree terminology Why trees?
Data Structures & Algorithm Design
Binary Trees, Binary Search Trees
Building Java Programs
Building Java Programs Chapter 17
TREES General trees Binary trees Binary search trees AVL trees
slides created by Marty Stepp and Alyssa Harding
Building Java Programs
slides created by Alyssa Harding
Binary Trees.
Binary Trees Based on slides by Alyssa Harding & Marty Stepp
Trees.
CSE 373: Data Structures and Algorithms
CSE 143 Lecture 20 Binary Search Trees, continued read 17.3
Trees CMSC 202, Version 5/02.
Building Java Programs
CMSC 202 Trees.
Building Java Programs
CSE 373: Data Structures and Algorithms
Design and Analysis of Algorithms
Data Structures and Algorithms
Binary Trees, Binary Search Trees
Binary Search Trees continued; Tree Sets
Lecture 21: Binary Search Trees; TreeSet
CMSC 341 Introduction to Trees CMSC 341 Tree Intro.
CSE 143 Lecture 25 Set ADT implementation; hashing read 11.2
CSE 373 Data Structures and Algorithms
Building Java Programs
Lecture 21: Binary Search Trees; TreeSet
Hashing based on slides by Marty Stepp
Trees.
Lecture 9: Intro to Trees
Binary Search Trees Based on slides by Marty Stepp & Alyssa Harding
Binary Trees, Binary Search Trees
Data Structures Using C++ 2E
Presentation transcript:

Building Java Programs Binary Trees reading: 17.1 – 17.3

Trees in computer science TreeMap and TreeSet implementations folders/files on a computer family genealogy; organizational charts AI: decision trees compilers: parse tree a = (b + c) * d; cell phone T9 d + * a = c b

Trees tree: A directed, acyclic structure of linked nodes. directed : Has one-way links between nodes. acyclic : No path wraps back around to the same node twice. binary tree: One where each node has at most two children. Recursive definition: A tree is either: empty (null), or a root node that contains: data, a left subtree, and a right subtree. (The left and/or right subtree could be empty.) 7 6 3 2 1 5 4 root The definition of a tree shown here is recursive.

Recursive data structure Recursive definition: A tree is either: empty (null), or a root node that contains: data, a left tree, and a right tree root 1 root 2 1 root root 7 3 1 root 1 3

Terminology node: an object containing a data value and left/right children root: topmost node of a tree leaf: a node that has no children branch: any internal node; neither the root nor a leaf parent: a node that refers to this one child: a node that this node refers to sibling: a node with a common parent subtree: the smaller tree of nodes on the left or right of the current node height: length of the longest path from the root to any node level or depth: length of the path from a root to a given node 7 6 3 2 1 5 4 root height = 3 level 1 level 2 level 3

A tree node for integers A basic tree node object stores data, refers to left/right Multiple nodes can be linked together into a larger tree left data right 42 left data right 59 left data right 27 Would it be useful to have a trinary tree? An N-ary tree? Yes, for some applications. A T9 cell phone typing algorithm uses a 26-ary "prefix tree" or "Trie". Databases often use N-ary trees for indexing for speed. But we can do a lot with just two links. left data right 86

IntTreeNode class left data right // An IntTreeNode object is one node in a binary tree of ints. public class IntTreeNode { public int data; // data stored at this node public IntTreeNode left; // reference to left subtree public IntTreeNode right; // reference to right subtree // Constructs a leaf node with the given data. public IntTreeNode(int data) { this(data, null, null); } // Constructs a branch node with the given data and links. public IntTreeNode(int data, IntTreeNode left, IntTreeNode right) { this.data = data; this.left = left; this.right = right; left data right

IntTree class // An IntTree object represents an entire binary tree of ints. public class IntTree { private IntTreeNode overallRoot; // null for an empty tree methods } Client code talks to the IntTree, not to the node objects inside it. Methods of the IntTree create and manipulate the nodes, their data and links between them. 7 6 3 2 1 5 4 overallRoot

Print IntTree We want to write a method that prints out the contents of an IntTree. Here is the output we want 17 41 29 6 9 81 40 40 81 9 41 17 6 29 overallRoot private void print(IntTreeNode root) { if (root != null) { System.out.print(root.data + " "); print(root.left); print(root.right); }

Traversals 40 81 9 41 17 6 29 Orderings for traversals pre-order: process root node, then its left/right subtrees in-order: process left subtree, then root node, then right post-order: process left/right subtrees, then root node pre-order: 17 41 29 6 9 81 40 40 81 9 41 17 6 29 overallRoot private void print(IntTreeNode root) { if (root != null) { System.out.print(root.data + " "); print(root.left); print(root.right); }

Traversals 40 81 9 41 17 6 29 Orderings for traversals pre-order: process root node, then its left/right subtrees in-order: process left subtree, then root node, then right post-order: process left/right subtrees, then root node in-order: 29 41 6 17 81 9 40 40 81 9 41 17 6 29 overallRoot private void print(IntTreeNode root) { if (root != null) { print(root.left); System.out.print(root.data + " "); print(root.right); }

Traversals 40 81 9 41 17 6 29 Orderings for traversals pre-order: process root node, then its left/right subtrees in-order: process left subtree, then root node, then right post-order: process left/right subtrees, then root node post-order: 29 6 41 81 40 9 17 40 81 9 41 17 6 29 overallRoot private void print(IntTreeNode root) { if (root != null) { print(root.left); print(root.right); System.out.print(root.data + " "); }

Exercise 3 86 9 15 42 27 48 overallRoot 12 39 5 Give pre-, in-, and post-order traversals for the following tree: pre: 42 15 27 48 9 86 12 5 3 39 in: 15 48 27 42 86 5 12 9 3 39 post: 48 27 15 5 12 86 39 3 42

Traversal trick 40 81 9 41 17 6 29 To quickly generate a traversal: overallRoot To quickly generate a traversal: Trace a path around the tree. As you pass a node on the proper side, process it. pre-order: left side in-order: bottom post-order: right side pre-order: 17 41 29 6 9 81 40 in-order: 29 41 6 17 81 9 40 post-order: 29 6 41 81 40 9 17

Exercise Add a method contains to the IntTree class that searches the tree for a given integer, returning true if it is found. If an IntTree variable tree referred to the tree below, the following calls would have these results: tree.contains(87)  true tree.contains(60)  true tree.contains(63)  false tree.contains(42)  false 60 29 87 55 42 -3 overallRoot

Exercise solution // Returns whether this tree contains the given integer. public boolean contains(int value) { return contains(overallRoot, value); } private boolean contains(IntTreeNode node, int value) { if (node == null) { return false; // base case: not found here } else if (node.data == value) { return true; // base case: found here } else { // recursive case: search left/right subtrees return contains(node.left, value) || contains(node.right, value);

Template for tree methods public class IntTree { private IntTreeNode overallRoot; ... public type name(parameters) { name(overallRoot, parameters); } private type name(IntTreeNode root, parameters) { Tree methods are often implemented recursively with a public/private pair the private version accepts the root node to process