trees
play

Trees Weiss sec. 7.3.5 (preview) ch. 18 (sort of) Data Structures - PowerPoint PPT Presentation

Trees Weiss sec. 7.3.5 (preview) ch. 18 (sort of) Data Structures So Far Arrays random access, fixed size, hard to insert/delete java.util.ArrayList random access, dynamic resize, hard to insert/delete Linked Lists


  1. Trees Weiss sec. 7.3.5 (preview) ch. 18 (sort of)

  2. Data Structures So Far • Arrays – random access, fixed size, hard to insert/delete • java.util.ArrayList – random access, dynamic resize, hard to insert/delete • Linked Lists – sequential access, dynamic resize, easy to insert/delete • Something new: – semi-random access, dynamic resize, semi-easy to insert/delete

  3. Trees • Iterative description: – a set of cells 5 5 – each cell has 0 or more 4 2 4 2 successors (children) – one cell is called the root 7 8 – each cell has 1 predecessor 7 8 9 (parent), except the root which Binary tree has no parent General tree • Recursive description: – a tree can be empty 5 5 – a tree can be a cell with 0 or more non-empty trees as 4 6 children • Binary tree: 7 8 8 – a tree where each cell has at Not a tree List-like tree most 2 children

  4. Terminology edge A � B • – A is parent of B – B is child of A path R � A � B • – R and A are ancestors of B – A and B are descendants of R R • leaf node has no descendants Root of tree 5 • depth of node is length of path Right sub-tree of root Left sub-tree of root from root to the node – depth(A) = 1 A 4 2 D – depth(B) = 2 • height of node : length of longest B C path from node to leaf 7 8 – height(A) = 1 – height(B) = 0 Binary tree • height of tree = height of root – in example, height of tree = 2

  5. Binary Tree Trivia depth • At most 2 d cells at depth d 0 5 1 4 2 • In tree of height h : – at least h+1 elements 2 8 4 7 0 – at most 2 h+1 – 1 elements Height 2, maximum number of nodes 5 2 4 Height 2, minimum number of nodes

  6. Code public class TreeCell { private Object elt; private TreeCell left; private TreeCell right; TreeCell // Construct a tree with only a single cell elt 5 public TreeCell(Object elt) { left this(elt, null, null); // defer to three-argument constructor } right // Construct a tree with children public TreeCell (Object elt, TreeCell left, TreeCell right) { this.elt = elt; this.left = left; this.right = right; } /* getters and setters: getElt, getLeft, getRight, setElt, … */ }

  7. General Trees: GTreeCell • One approach: array of children public class GTreeCell { protected Object elt; protected GTreeCell [ ] children; … }

  8. General Trees: GTreeCell • Second approach: linked list of children public class GTreeCell { protected Object elt; protected ListCell children; … }

  9. General Trees: GTreeCell • Third approach: TreeCell doubles as a ListCell – Store the next pointer from ListCell in the TreeCell object – Each cell maintains link to left child and right sibling public class GTreeCell { protected Object elt; protected GTreeCell left; protected GTreeCell sibling; // essentially ListCell.next Q: How to enumerate children? 5 5 4 2 4 2 8 9 7 7 8 9 1 8 3 7 1 7 8 3 Tree represented using GTreeCell General tree

  10. General Trees: GTreeCell • Last approach: Circular sibling list – Let the sibling list “wrap around” – Helps with some operations 5 5 4 2 4 2 8 9 7 7 8 9 1 8 3 7 1 7 8 3 Tree represented using GTreeCell General tree

  11. Applications • Trees can represent structure of a language as an abstract syntax tree (AST) Text Tree representation • Example grammar: -34 -34 E : (E + E) E : integer | variable + (x + 3) • What can we do with AST? x 3 – integration, differentiation, etc. – constant-expression elimination ((2+y) + (5+7)) – re-arrange expressions + + + 2 y 5 7

  12. Recursion on Trees • Similar to recursion on lists or integers • Base case: empty tree (or one-cell tree) • Recursive case: – solve for subtrees – combine these solutions to get solution for whole tree

  13. Search: Recursive • Find out if object o is in the tree: static boolean search(TreeCell t, Object o); • Recursive version is trivial; Try the iterative version at home… public static boolean search(TreeCell t, Object o) { ((2+y) + (5+7)) if (t == null) return false; else return t.getElt().equals(o) | | + search(t.getLeft(), o) | | search(t.getRight(), o); } + + 2 y 5 7

  14. Traversal Ordering • search( ) traverses tree in following recursive order: – first process root node + – then process left subtree – then process right subtree + + • pre-order walk: 2 y 5 7 root, left, right • in-order walk: left, root, right • post-order walk: left, right, root

  15. Variations • Write a header class called Tree – tree methods can be instance & static methods of Tree • Maintain reference to parent in each cell – analagous to doubly-linked list

Recommend


More recommend