420 likes | 551 Views
Problem of the Day. A person looks at a picture and says: Brothers and sisters I have none, but this man’s father is my father’s son. Who’s picture is he looking at ?. Problem of the Day.
E N D
Problem of the Day • A person looks at a picture and says:Brothers and sisters I have none, but this man’s father is my father’s son.Who’s picture is he looking at?
Problem of the Day • A person looks at a picture and says:Brothers and sisters I have none, but this man’s father is my father’s son.Who’s picture is he looking at? • He is looking at a picture of his son.
CSC 212 – Data Structures Lecture 36:Tree Implementation
“Node” Sounds Technical… • Links in linked list commonly called “nodes” • Node is name for links in a Tree also • No relation to linked list class; totally different ideas • Each node’s data retrieved using getElement() • Node class often used by data structures • Node is not specific, but sounds better than “thingy” • More node classes to be seen, we use them a lot
Node Heights • Longest count to leaf node • D's height is 1 • B's height is 3 • A's height is 4 A D B C E G H F K I J
Node Heights • Height 1 more than taller child • F's height is 2 • B's height is 3 • E's height is 1 • Height of leaf always 1 A D B C E G H F K I J
Node Depths • Distance to root node of Tree • A's depth is 0 • C's depth is 1 • I's depth is 3 A D B C E G H F K I J
Node Depths • Depth of a node is1 more than its parent • Root's depth always 0 • B, C, & D have depth of 1 • E, F, G, H have depth of 2 • I, J, K have depth of 3 A D B C E G H F K I J
BinaryTree Interface • All of the methods defined by the interface E getRootElement()boolean contains(tgt)E find(tgt)Iterator<E> iteratorInOrder()Iterator<E> iteratorPreOrder() Iterator<E> iteratorPostOrder() Iterator<E> iteratorLevelOrder() Iterator<E> iterator()int size()booleanisEmpty()
BinaryTree Interface • Often have other methods beyond these in class
BinaryTree Interface • Often have other methods beyond these in class • For example, want methods to addor remove data
BinaryTree Interface • Often have other methods beyond these in class • For example, want methods to addor remove data
BinaryTree Interface • Often have other methods beyond these in class • For example, want methods to addor remove data • Good hint: Used in other ADTs through rest of year
BinaryTreeNodes • BinaryTree interface never exposes nodes
BinaryTreeNodes • BinaryTree interface never exposes nodes CENSORED
BinaryTreeNodes • BinaryTree interface never exposes nodes • Remain implementation-free; nodes detail how it works
Node Class For Tree class TNode<E> {private Eelement;private TNode<E>parent;private ArrayList<TNode<E>>kids;// Besides getters & setters, often include methods like:public TNode<E>getChild(inti) { return kids.get(i);}public void addChild(TNode<E> kid) { kids.addToRear(kid);}public TNode<E>removeChild(inti) { return kids.remove(i); } }
Visualization of Tree B B A D F A D F C E C E
Node Structure of the Tree B B A D F A D F C E C E
Links Between Tree's Nodes B B A D F A D F C E C E
Links Between Tree's Nodes B B A D F A D F C E C E
Actual View of Tree B B A D F A D F C E C E
Linked Node for BinaryTree class BTNode<E>{private Eelement;private BTNode<E>left;private BTNode<E>right;// Add getters & setters for each fieldpublic booleanhasLeftChild(){ return left != null; }public BTNode<E> getRight(){ return right; } }
D C B A Picturing LinkedBinaryTree B A C D
D C B A Nodes in LinkedBinaryTree B A C D
Pointers in LinkedBinaryTree B B A C D A C D
Array-based BinaryTree • Node at index specified for location in Tree • Root node stored at index 0 • Root’s left child at index 1 • Right child of root at index 2 • Left child’s right child at index 4 • Right child’s left child at index 5 • Node at index n’s left child is at index 2n + 1 • Node at index n’s right child is at index 2n + 2
Array-based Implementation • Tree’s depth limited by array size • Where in array determined by location • Listovercomes limits • null added to pad space • Replace value at index to to add nodes
Array-based Implementation • Tree’s depth limited by array size • Where in array determined by location • Listovercomes limits • null added to pad space • Replace value at index to to add nodes
Array-based Implementation • Tree’s depth limited by array size • Where in array determined by location • Listovercomes limits • null added to pad space • Replace value at index to to add nodes
Array-based Implementation • Tree’s depth limited by array size • Where in array determined by location • Listovercomes limits • null added to pad space • Replace value at index to to add nodes • Cannot easily overcome limits • Be careful using this approach
Array-based Impl. A B D C E F J G H
Array-based Impl. A A B D B D E F C J C E F J G H G H
2nd Array-based Impl. A G B D H F C J E A B D C E F J G H
Correct Array-based Impl. A 0 G C E B D F J A 1 2 B D 3 4 5 6 C E F J 9 10 G H H
Array Refers to Nodes A 0 G C E B D F J A 1 2 B D 3 4 5 6 C E F J 9 10 G H H
Nodes Implicitly Linked Only A 0 G B D A 1 2 B D 3 4 5 6 C E F J E F C J 9 10 G H H
Nodes Implicitly Linked Only A 0 G B D A 1 2 B D 3 4 5 6 C E F J E F C J 9 10 G H H
Node for Array-based Impl. public class BANode<E>{private Eelement;privateintmyIndex;privatebooleanhasLeft;privatebooleanhasRight;// Add getters & setters for each fieldpublic intgetLeft() { if (!hasLeft) { return -1; } return (myIndex* 2) + 1;}public void setRight() {hasRight= true; } }
Your Turn • Get into your groups and complete activity
For Next Lecture • Read 12.1 & online for Friday's lecture • What and how does a heap extend BinaryTree? • Why does heap sound familiar, but why is it not? • Can computer science ever be consistent with terms? • Week #13 posted today & due week from Tues. • Programming Assignment #2 available now