1. Trang chủ
  2. » Công Nghệ Thông Tin

Lecture Java methods: Object-oriented programming and data structures (2nd AP edition): Chapter 24 - Maria Litvin, Gary Litvin

30 34 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 375,55 KB

Nội dung

Chapter 24 - Binary trees. In this chapter, the learning objectives are: Learn about binary trees; learn how to represent and handle a binary tree using the TreeNode class; learn about binary search trees; review sets and maps, and the java.util classes that implement them.

Java Methods Object-Oriented Programming and Data Structures 2nd AP edition with GridWorld Maria Litvin ● Gary Litvin   C A H E P T R Binary Trees Copyright © 2011 by Maria Litvin, Gary Litvin, and Skylight Publishing All rights reserved Objectives: • Learn about binary trees • Learn how to represent and handle a binary tree using the TreeNode class • Learn about binary search trees • Review sets and maps, and the java.util classes that implement them 24­2 Some Applications of Trees • • • • • Data retrieval (search) Priority queues Decision systems Hierarchies Games 24­3 Binary Tree Terms Root   Left child Right child                                               Leaves (nodes with no children) node                         Number of levels (equals here) node’s right subtree 24­4 Binary Tree Properties • A shallow tree can hold many nodes For example, a binary tree with 20 levels can have 220 - (approximately 1,000,000) nodes • At each node a decision can be made on where to proceed, left or right (used in binary search trees) • The path to the bottom is relatively short as compared to the total number of nodes 24­5 The TreeNode Class • Represents a node of a binary tree • Is similar to ListNode (Chapter 21) only instead of next has left and right public class TreeNode { private Object value; private TreeNode left; private TreeNode right; Holds a reference to the left child Holds a reference to the right child 24­6 The TreeNode Class (cont’d) // Constructors: public TreeNode (Object v) { value = v; left = null; right = null; } public TreeNode (Object v, TreeNode lt, TreeNode rt) { value = v; left = lt; right = rt; } // Methods: public Object getValue ( ) { return value; } public TreeNode getLeft ( ) { return left; } public TreeNode getRight ( ) { return right; } public void setValue (Object v) { value = v; } public void setLeft (TreeNode lt) { left = lt; } public void setRight (TreeNode rt) { right = rt; } } 24­7 Trees and Recursion • The tree structure is recursive by nature — the left and right subtrees are smaller trees: private void traverse (TreeNode root) { // Base case: root == null, // the tree is empty nothing if (root != null) // Recursive case { process (root.getValue ( )); traverse (root.getLeft ( )); traverse (root.getRight ( )); } } 24­8 TreeNode Example public int countNodes (TreeNode root) { Base case if (root == null) return 0; else return + countNodes (root.getLeft ( )) + countNodes (root.getRight ( )); } (for the root) 24­9 TreeNode Example // returns a reference to a new tree, which is a // copy of the tree rooted at root public TreeNode copy (TreeNode root) { if (root == null) return null; else return new TreeNode (root.getValue ( ), copy (root.getLeft ( )), copy (root.getRight ( ))); } 24­10 BST (cont’d) • BSTs combine the benefits of sorted arrays for quick searching and linked lists for inserting and deleting values   A Z A L M N Z F S A E G L C I N R T Z P V 24­16 BST (cont’d) Recursive contains // root refers to a BST; the nodes hold Strings private boolean contains (TreeNode root, String target) { if (root == null) return false; int diff = target.compareTo ((String) root.getValue ( )); if (diff == 0) return true; else if (diff < 0) return contains (root.getLeft ( ), target); else // if (diff > 0) return contains (root.getRight ( ), target); } 24­17 BST (cont’d) Iterative contains private boolean contains (TreeNode root, String target) { TreeNode node = root; while ( node != null ) { int diff = target.compareTo (node.getValue ()); if (diff == 0) return true; else if (diff < 0) node = node.getLeft (); else // if diff > node = node.getRight (); } return false; } 24­18 A BST Class public class MyTreeSet { private TreeNode root; private boolean contains (Object target) { return contains (root, target); } Private recursive helper method private boolean contains (TreeNode root, Object target) { if (root == null) return false; } } 24­19 BST (cont’d)   27 The smallest node 17 37 19 33 23 31 The largest node 51 34 40 24­20 Adding a Node Private recursive helper method private TreeNode add (TreeNode node, Object value) { if (node == null) node = new TreeNode(value); else { int diff = ((Comparable)value).compareTo (root.getValue( )); if (diff < 0) root.setLeft (add (root.getLeft( ), value)); else // if (diff > 0) root.setRight (add (root.getRight( ), value)); } return node; } 24­21 BST: Removing the Root Node Step 1: Find the smallest node of the right subtree Step 2: Unlink that node and promote its right child into its place 50 50 30 25 60 75 40 60 20 90 30 25 70 40 20 69 75 69 72 50 Step 3: Link that note in place of the root and remove the old root 60 30 25 20 75 40 90 70 69 90 70 72 24­22 72 BST (cont’d) • When the tree is balanced (“bushy”) the add, remove, and contains methods take O(log n) time, where n is the number of nodes in the tree • If nodes are added randomly, the BST can degenerate into a nearly linear shape • More sophisticated algorithms help keep the tree balanced 24­23 java.util.TreeSet • Is implemented as a balanced BST • compareTo (or comparator’s compare) is used by the add, contains, and remove methods • An iterator returned by the iterator method implements inorder traversal • Inorder traversal of any BST retrieves values in ascending order 24­24 java.util.TreeSet (cont’d) Never mind 24­25 java.util.TreeMap • Is implemented as a BST for keys • compareTo (or comparator’s compare) for keys is used by the put, get, containsKey, and remove methods • The keySet method returns a TreeSet 24­26 java.util.TreeMap (cont’d) 24­27 Review: • • • • • Name a few applications of trees Why is recursion applicable to trees? What is a leaf of a tree? What is a subtree? Which property makes binary trees suitable for data retrieval applications? 24­28 Review (cont’d): • What is the largest possible number of nodes in a binary tree with 10 levels? • Can the TreeNode class be used to represent a node in a doubly-linked list? • What is the sequence of values in preorder and postorder traversals of the following tree? A / \ B C / \ D E 24­29 Review (cont’d): • What is a Binary Search Tree? • Inorder traversal of a BST has a neat property What is it? • Which of the following trees are BSTs? / \ / \ / \ / \ / \ / \ 24­30 ... to represent and handle a binary tree using the TreeNode class • Learn about binary search trees • Review sets and maps, and the java. util classes that implement them 24? ?2 Some Applications of... The keySet method returns a TreeSet 24? ?26 java. util.TreeMap (cont’d) 24? ?27 Review: • • • • • Name a few applications of trees Why is recursion applicable to trees? What is a leaf of a... in the tree • If nodes are added randomly, the BST can degenerate into a nearly linear shape • More sophisticated algorithms help keep the tree balanced 24? ?23 java. util.TreeSet • Is implemented

Ngày đăng: 04/11/2020, 23:19