Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Complete Binary Trees Chapter 10 introduces trees. This presentation illustrates the simplest kind of trees: Complete Binary Trees. Data Structures and Other Objects Using C++ Trees First example of nonlinear structure Do not form a simple sequence of first entry, second entry, …… More complex linking between the components Binary Trees A binary tree has nodes, similar to nodes in a linked list structure. Data of one sort or another may be stored at each node. But it is the connections between the nodes which characterize a binary tree. Binary Trees A binary tree has nodes, similar to nodes in a linked list structure. Data of one sort or another may be stored at each node. But it is the connections between the nodes which characterize a binary tree. An example can illustrate how the connections work A Binary Tree of States In this example, the data contained at each node is one of the 50 states. Washington Arkansas Colorado Arizona Florida Massachusetts Oklahoma A Binary Tree of States Each tree has a special node called its root, usually drawn at the top. Washington Arkansas Colorado Arizona Florida Massachusetts Oklahoma A Binary Tree of States Each tree has a special node called its root, usually drawn at the top. Washington Arkansas Colorado Arizona Florida Massachusetts The example tree Oklahoma has Washington as its root. A Binary Tree of States Each node is permitted to have two links to other nodes, called the left child and the right child. Washington Arkansas Colorado Arizona Florida Massachusetts Oklahoma A Binary Tree of States Each node is permitted to have two links to other nodes, called the left child and the right child. Washington Arkansas Colorado Arizona Florida Massachusetts Oklahoma A Binary Tree of States Children are usually drawn below a node. Washington Arkansas Colorado Arizona The left child of Florida Washington is Arkansas. Massachusetts The right child of Oklahoma Washington is Colorado. A Binary Tree of States Some nodes have only one child. Washington Arkansas Colorado Arizona Florida Arkansas has a left child, but no right child. Massachusetts Oklahoma A Quiz Some nodes have only one child. Washington Arkansas Colorado Arizona Florida Which node has only a right child? Massachusetts Oklahoma A Quiz Washington Some nodes have only one child. Arkansas Colorado Arizona Florida Florida has only a right child. Massachusetts Oklahoma A Binary Tree of States A node with no children is called a leaf. Washington Arkansas Colorado Arizona Florida Massachusetts Oklahoma A Binary Tree of States Each node is called the parent of its children. Washington Arkansas Colorado Arizona Florida Washington is the parent of Arkansas and Colorado. Massachusetts Oklahoma A Binary Tree of States Washington Two rules about parents: The root has no parent. Every other node has exactly one parent. Arkansas Colorado Arizona Florida Massachusetts Oklahoma A Binary Tree of States Washington Two nodes with the same parent are called siblings. Arkansas Colorado Arizona Florida Arkansas and Colorado are siblings. Massachusetts Oklahoma Binary Trees Terminologies Node Parent Children: left and right child Sibling: have the same parent Leaf: a node with no children Ancestor First ancestor: the node’s parent Next ancestor: the parent of the parent Descendant First descendant: the node’s children Next descendant: the children’s children Subtree: left and right subtree Depth of a node: the number of steps moving up to the parent Root node is at 0 depth Binary Trees Terminologies Depth of a tree Full binary tree The maximum depth of any of its leaves Every leaf has the same depth, and every non-leaf has two children Complete binary tree Every level except the deepest must contain as many nodes as possible At the deepest level, all the nodes are as far left as possible Complete Binary Trees A complete binary tree is a special kind of binary tree which will be useful to us. Complete Binary Trees A complete binary tree is a special kind of binary tree which will be useful to us. When a complete binary tree is built, its first node must be the root. Complete Binary Trees The second node of a complete binary tree is always the left child of the root... Complete Binary Trees The second node of a complete binary tree is always the left child of the root... ... and the third node is always the right child of the root. Complete Binary Trees The next nodes must always fill the next level from left to right. Complete Binary Trees The next nodes must always fill the next level from left to right. Complete Binary Trees The next nodes must always fill the next level from left to right. Complete Binary Trees The next nodes must always fill the next level from left to right. Complete Binary Trees The next nodes must always fill the next level from left to right. Complete Binary Trees The next nodes must always fill the next level from left to right. Is This Complete? Is This Complete? Is This Complete? Is This Complete? Is This Complete? Yes! It is called the empty tree, and it has no nodes, not even a root. Binary Trees A binary tree is a finite set of nodes. The set might be empty. But if the set is not empty, it follows these rules: There is one special node, called the root. Each node may be associated with up to two other different nodes. Each node, except the root, has exactly one parent; the root has no parent If you start at a node and move to the node’s parent, then move again to that node’s parent, and keep moving upward to each node’s parent, you will eventually reach the root. Implementing a Complete Binary Tree We will store the date from the nodes in a partially-filled array. 3 An integer to keep track of how many nodes are in the tree An array of data We don't care what's in this part of the array. Implementing a Complete Binary Tree R 0 1 2 3 4 5 6 7 8 Implementing a Complete Binary Tree R 0 1 2 3 4 5 6 7 8 Implementing a Complete Binary Tree R E 0 1 2 3 4 5 6 7 8 Implementing a Complete Binary Tree R E C 0 1 2 3 4 5 6 7 8 Implementing a Complete Binary Tree R E C U 0 1 2 3 4 5 6 7 8 Implementing a Complete Binary Tree R E C U R 0 1 2 3 4 5 6 7 8 Implementing a Complete Binary Tree R E C U R S 0 1 2 3 4 5 6 7 8 Implementing a Complete Binary Tree R E 0 1 C 2 U R S I 3 4 5 6 7 8 Implementing a Complete Binary Tree R E 0 1 C 2 U R S I O 3 4 5 6 7 N 8 Implementing a Complete Binary Tree Properties: 1.Root node is at index 0 2.The parent of a node at index i is at location (i - 1)/2 3.The children of a node at index i are at 2 * i + 1 and 2 * i + 2 * If those indices are out of bounds, then the nodes does not have one or both of those children R E 0 1 C 2 U R S I O 3 4 5 6 7 N 8 Implementing a Complete Binary Tree using Nodes The node has: 1. Data element 2. Left link 3. Right link Tree Operations: 1. Tree size 2. Tree clear 3. Tree copy Animal Guess Game Animal Guess Game Exam the code: 1.Useful functions 1.void eat_line( ) 2.bool inquire(const char query[ ]) 2.void instruct( ) •Postcondition: Instructions for playing the game have been printed to the screen. 3.binary_tree_node<string>* beginning_tree( ) •Postcondition: The function has created a small binary tree. The return value is the root pointer of the new tree. 4.void play(binary_tree_node<string>* current_ptr) •Precondition: current_ptr points to the root of a binary tree with at least two leaves. •Postcondition: One round of the animal game has been played, and maybe the tree has been improved. 5.void ask_and_move(binary_tree_node<string>*& current_ptr) •Precondition: current_ptr points to a non-leaf node in a binary tree. •Postcondition: The question at the current node has been asked. The current pointer has been shifted left (if the user answered yes) or right (for a no answer). 6.void learn(binary_tree_node<string>*& leaf_ptr) •Precondition: leaf_ptr is a pointer to a leaf in a binary tree. The leaf contains a wrong guess that was just made. •Postcondition: Information has been elicited from the user, and the tree has been improved. Implementing a Complete Binary Tree using Nodes Tree traversals 7 1. In-order 2. Pre-order 3. Post-order Do not want to rewrite traversal for every usage Pass in usage (function) as an argument to traversal function 5 3 2 8 6 4 9 6 template <class BTNode> void inorder(BTNode* node_ptr) { if (node_ptr != NULL) { inorder(node_ptr->left( )); cout << node_ptr->data( ) ); inorder(node_ptr->right( )); } } Function Parameters Parameter to a function may be a function void apply(void f(int&), int data[], size_t n) Precondition: data is an array with at least n components Post-condition: the function f has been applied to the n components of the data array Function Parameters void apply (void f(int&), int data[], size_t n) { for (size_t i = 0; i < n; ++i) f(data[i]); } void seven_up(int & i){ i += 7; } apply(seven_up, numbers, 10); Template Function Parameters Template<class Item, class SizeType> void apply (void f(Item&), Item data[], SizeType n) { for (size_t i = 0; i < n; ++i) f(data[i]); } void convert_to_upper(char & c); apply(convert_to_upper, names, 10); Further Generalization Template<class Process, class Item, class SizeType> void apply (Process f, Item data[], SizeType n) { for (size_t i = 0; i < n; ++i) f(data[i]); } void triple(int & i); void print(const string & s); apply(triple, numbers, 10); Apply(print, words, 10); Template Function for Tree Traversals Template<class Process, class BTNode> void preorder (Process f, BTNOde* node_ptr) { if (node_ptr != NULL) { f (node_ptr->data()); preorder(f, node_ptr->left()); preorder(f, node_ptr->right()); } } Summary Binary trees contain nodes. Each node may have a left child and a right child. If you start from any node and move upward, you will eventually reach the root. Every node except the root has one parent. The root has no parent. Complete binary trees require the nodes to fill in each level from left-to-right before starting the next level.