Download Presentation
## Binary Trees

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -

**Node structure**A data field and two pointers, left and right Data**Binary tree structure**Binary tree: A tree in which each node has at most two children. Tree: A non-linear data structure (representing a strictly hierarchical system of data) where each data item is thought of as a node. Strictly binary tree: A tree in which each node has precisely two children.**Recursive!**All the nodes together form a binary tree. The nodes within the red triangle also form a binary tree. The nodes within the green triangle also form a binary tree. How may binary trees are there in total?**Binary search tree**50 76 25 12 37 65 89 59 72 83 95 6 17 32 41 • Binary search tree: A binary tree that has the following properties: • The left subtree of a node contains only nodes with data less than the node's data. • The right subtree of a node contains only nodes with data greater than the node's data. • Both the left and right subtreesare also binary search trees.**Terminology**root node Parent of the node that contains 12 59 50 76 25 12 37 65 89 83 72 95 6 17 32 41 Right subtree of the tree of which the 76 node is the root Left child of the node that contains 25 Leaf nodes**Insertion operation**We want to insert a new node into the tree. Where should we put it? 50 76 25 12 37 65 59 72 83 95 6 17 32 41 89 63**Insertion operation**It is bigger than 50, so go down the right subtree… 50 76 25 12 37 65 59 72 83 95 6 17 32 41 89 63**Insertion operation**It is smaller than 76, so go down the left subtree… 50 76 25 12 37 65 59 72 83 95 6 17 32 41 89 63**Insertion operation**It is smaller than 65, so go down the left subtree… 50 76 25 12 37 65 59 72 83 95 6 17 32 41 89 63**Insertion operation**It is bigger than 59, and 59 has no right children, so that’s where it goes. 50 76 25 12 37 65 59 72 83 95 6 17 32 41 89 63**Task**Think about how you would code the insert operation… 50 76 25 12 37 65 59 72 83 95 6 17 32 41 89 63**The iterative way**Don’t think about this too long because there is a beautifully elegant alternative… 50 76 25 12 37 65 89 59 72 83 95 6 17 32 41 63 private Node root; public void insert(int data) { if (root == null) { root = new Node(data); return; } Node tmp = root; while (true) { if (data == root.getData()) { // Data is already in the tree return; } else if (data < root.getData()) { // insert left if (root.getLeft() == null) { root.setLeft(new Node(data)); return; } else { tmp = root.getLeft(); } } else { // insert right if (root.getRight() == null) { root.setRight(new Node(data)); return; } else { tmp = root.getRight(); } } } }**The recursive way**Recursion is sometimes tough to get your head round. But can be very simple and very elegant. 50 76 25 12 37 65 89 59 72 83 95 6 17 32 41 63 void insertNode(Node root, int data) { if (root == NULL) root = new Node(data); else if (data < root.getData()) insertNode(root.getLeft(), data); else insertNode(root.getRight(), data); } You will be expected to be able to code this type of method from scratch for your exam**Binary Tree Traversals**"Traversing" a binary tree means visiting every node in turn. 50 76 25 12 37 65 89 59 72 83 95 6 17 32 41 • There are three types of traversal: • Preorder • Inorder • Postorder**Binary Tree Traversals**Let's say that you want to print out your binary tree. Here are the three different traversals. Preorder: When you get to a node: Print the node's data. Then traverse its left subtree. Then traverse its right subtree. Postorder: When you get to a node: Traverse its left subtree. Then traverse its right subtree. Then print the node's data. Inorder: When you get to a node: Traverse its left subtree. Then print the node's data. Then traverse its right subtree. void postOrder(Node n){if(n == null) return;postOrder(n.left);postOrder(n.right); print(n);} void preOrder(Node n){if(n == null) return;print(n);preOrder(n.left);preOrder(n.right);} void inOrder(Node n){if(n == null) return;inOrder(n.left); print(n);inOrder(n.right);} Which of these would you want to use to print your binary search tree in ascending order?**Task**Write down the order of the numbers as printed by each of the traversals. 50 76 25 12 37 65 89 59 72 83 95 6 17 32 41 void preOrder(Node n){if(n == null) return;print(n);preOrder(n.left);preOrder(n.right);} void inOrder(Node n){if(n == null) return;inOrder(n.left); print(n);inOrder(n.right);} void postOrder(Node n){if(n == null) return;postOrder(n.left);postOrder(n.right); print(n);}**Infix, prefix and postfix notation**Consider the following mathematical expression: 4 (3 + 8) This is written in what is called infix notation, in which the operators (+, - , x, /) are written between their operands. It is the usual notation that you are familiar with from mathematics. However, there are two other ways of writing expressions like these, and both of them are used in computer science. In prefix notation, also known as Polish notation, the operators come before their operands. In postfix notation, also known as Reverse Polish notation, the operators come after their operands. (All operators are assumed to be binary.)**Examples**Infix: 4 (3 + 8) Prefix: 4 + 3 8 Postfix: 4 3 8 + Convert the following expressions to prefix and postfix: 4 + 5 4 / 3 + 7 (5 + 2) (3 + 1) 4 / (3 + 6) + 5 9**Why use different notations?**• Computers normally convert all infix expressions to postfix. • Reasons: • Brackets are not necessary in postfix expressions • There are no rules about precedence in postfix expressions, as there are in infix expressions • Postfix expressions are easy to evaluate using stacks • Stacks are fast and easy to program**What has this got to do with binary trees?**• What happens when the following tree is printed: • preorder • inorder • postorder**Using stacks to evaluate postfix expressions**• When we see an operand, push it onto the stack • When we see an operator, pop two operands from the stack, do the operation, and push the answer onto the stack • Loop • If you follow this algorithm, you will be left with one value on the stack, which is the answer to the expression.**Task**• Create annotated notes in Word, using drawing objects. • Show how 5 x (4 + 3) is converted to postfix notation. • Show how the postfix expression is evaluated using a stack.**Task answer**Parse expression 5 (4 + 3) 1 3 Convert to postfix: 543+ 4 Push 5 Push 4 5 Push 3 (diagram 1) Pop 3 2 7 Pop 4 5 Push 3 + 4 = 7 (diagram 2) Pop 7 3 35 Pop 5 Push 7 5 = 35(diagram 3)