1 / 31

Starting Out with C++ Early Objects Seventh Edition

Chapter 19: Binary Trees. Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy Walters, and Godfrey Muganda Modified for use at Midwestern State University. Banyan Tree. Topics. 19.1 Definition and Application of Binary Trees 19.2 Binary Search Tree Operations

jalila
Download Presentation

Starting Out with C++ Early Objects Seventh Edition

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. Chapter 19: Binary Trees Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy Walters, and Godfrey Muganda Modified for use at Midwestern State University Banyan Tree

  2. Topics 19.1 Definition and Application of Binary Trees 19.2 Binary Search Tree Operations 19.3 Template Considerations for Binary Search Trees

  3. 19.1 Definition & Application of Binary Trees • Binary tree: a nonlinear data structure in which each node may point to 0, 1, or two other nodes • The nodes that a node N points to are the (left or right) children of N NULL NULL NULL NULL NULL NULL

  4. Terminology • If a node N is a child of another node P, then P is called the parent of N • A node that has no children is called a leaf • In a binary tree there is a unique node with no parent. This is the root of the tree

  5. Binary Tree Terminology Root • Root pointer: points to the root node of the binary tree (like a head pointer for a linked list) Node * Root: • Root node: the node with no parent NULL NULL NULL NULL NULL NULL

  6. Binary Tree Terminology Leaf nodes: nodes that have no children The nodes containing 7 and 43 ARE leaf nodes Nodes containing 19 & 59 are NOT leaf nodes 31 19 59 7 NULL 43 NULL NULL NULL NULL NULL

  7. Binary Tree Terminology Child nodes, children: The children of node containing 31 are the nodes containing 19 and 59 The parent of the node containing 43 is the node containing 59 31 19 59 7 43 NULL NULL NULL NULL NULL NULL

  8. Binary Tree Terminology • A subtree of a binary tree is a part of the tree including node N& all subsequent nodes down to the leaf nodes • Such a subtree is said to be rooted at N, and N is called the root of the subtree

  9. Subtrees of Binary Trees • A subtree of a binary tree is itself a binary tree • A nonempty binary tree consists of a root node, with the rest of its nodes forming two subtrees, called the left and right subtree

  10. Binary Tree Terminology • The node containing 31 is the root • The nodes containing 19 and 7 form the left subtree • The nodes containing 59 and 43 form the right subtree 31 19 59 7 43 NULL NULL NULL NULL NULL NULL

  11. Uses of Binary Trees • Binary search tree: a binary tree whose data is organized to improve search efficiency • Left subtree at each node contains data values less than the data in the node • Right subtree at each node contains values greater than the data in the node • Duplicates – either side but must be consistent 31 19 59 7 NULL 43 NULL NULL NULL NULL NULL

  12. 19.2 Binary Search Tree Operations • Create a binary search tree • Repeatedly call insert function, once for each data item • Insert a node into a binary tree – put node into tree in its correct position to maintain order • Find a node in a binary tree – locate a node with particular data value • Delete a node from a binary tree – remove a node and adjust links to preserve the binary tree and the order

  13. Binary Search Tree Node • A node in a binary tree is similar to linked list node, except it has two node pointer fields: struct TreeNode { int value; TreeNode *left; TreeNode *right; }; • A constructor can aid in the creation of nodes

  14. TreeNode Constructor TreeNode::TreeNode(int val) { value = val; left = NULL; right = NULL; }

  15. 23 NULL NULL Creating a New Node TreeNode *p; int num = 23; p = new TreeNode(num); p

  16. Inserting an item into a Binary Search Tree • If tree is empty, replace empty tree with a new binary tree consisting of the new node as root, with empty left & right subtrees • Otherwise, • if item is less than (or equal to) root, recursively insert item in left subtree. • If item is greater than root, recursively insert the item into the right subtree

  17. Inserting an item into a Binary Search Tree (BST) Step 1: 23 is less than 31. Recursively insert 23 into the left subtree Step 2: 23 is greater than 19. Recursively insert 23 into the right subtree root 31 value to insert: 23 19 59 7 43 NULL NULL NULL NULL NULL NULL Step 3: Since the right subtree is NULL, insert 23 here

  18. Inserting to BST // allows for duplicate entries – see p. 1119 for code to // avoid inserting duplicates void InsertBST (TreeNode *&tree, intnum) { if (tree == NULL) // empty tree {tree = new TreeNode (num); return;} if (num <= tree -> value) InsertBST (tree -> left, num); else InsertBST (tree -> right, num); }

  19. Traversing a Binary Tree -3 methods Inorder: • Traverse left subtree of node • Process data in node • Traverse right subtree of node Preorder: • Process data in node • Traverse left subtree of node • Traverse right subtree of node Postorder: • Traverse left subtree of node • Traverse right subtree of node • Process data in node

  20. Inorder Traversal void Inord (Node * R) { if (R == Null) return; else { Inord (R -> left) Process (R -> value) Inord (R -> right) } }

  21. Preorder Traversal void Pre (Node * R) { if (R == Null) return; else { Process (R -> value) Pre (R -> left) Pre (R -> right) } }

  22. Postorder traversal void Post (Node * R) { if (R == Null) return; else { Post (R -> left) Post (R -> right) Process (R -> value) } }

  23. HOMEWORK! Memorize the code for the insert BST, inorder, preorder and postorder traversals of a binary tree! Will be on quiz & test!

  24. Traversing a Binary Tree 31 19 59 7 43 NULL NULL NULL NULL NULL NULL

  25. Searching in a Binary Tree • Start at root node • Examine node data: • Is it desired value? Done • Else, is desired data <= node data? Repeat step 2 with left subtree • Else, is desired data > node data? Repeat step 2 with right subtree • Continue until desired value found or NULL pointer reached 31 19 59 7 43 NULL NULL NULL NULL NULL NULL

  26. Searching in a Binary Tree To locate the node containing 43, • Examine the root node (31) • Since 43> 31, examine the right child of the node containing 31, (59) • Since 43 < 59, examine the left child of the node containing 59, (43) • The node containing 43 has been found 31 19 59 7 NULL 43 NULL NULL NULL NULL NULL

  27. Deleting a Node from a Binary Tree – Leaf Node If node to be deleted is a leaf node, replace parent node’s pointer to it with a NULL pointer, then delete the node 19 19 NULL NULL 7 NULL NULL NULL Deleting node with 7 – before deletion Deleting node with 7 – after deletion

  28. Deleting a Node from a Binary Tree – One Child If node to be deleted has one child • Adjust pointers so that parent of node to be deleted points to child of node to be deleted • Delete the node

  29. Deleting a Node from a Binary Tree – One Child 31 31 19 59 7 59 NULL NULL 7 43 NULL 43 NULL NULL NULL NULL NULL NULL NULL NULL Deleting node containing 19 – before deletion Deletingnodecontaining19 – afterdeletion

  30. Deleting a node with 2 children • Select a replacement node. • Choose the largest node in the left subtree OR • Choose the smallest node in the right subtree • Copy replacement data into node being deleted • Delete replacement node • It will have one or zero children

  31. Finding replacement node • Largest node in left subtree • From node to be deleted, go left once • Then go right until a null is found • Smallest node in right subtree • From node to be deleted, go right once • Then go left until a null is found

More Related