280 likes | 413 Views
Trees. Definitions Read Weiss, 4.1 – 4.2 Implementation Nodes and Links One Arrays Three Arrays Traversals Preorder, Inorder , Postorder K- ary Trees Converting trees: k- ary ↔ binary. Definitions. Nodes Edges Root node Interior node Leaf Parent Children.
E N D
Trees • Definitions • Read Weiss, 4.1 – 4.2 • Implementation • Nodes and Links • One Arrays • Three Arrays • Traversals • Preorder, Inorder, Postorder • K-ary Trees • Converting trees: k-ary↔ binary
Definitions • Nodes • Edges • Root node • Interior node • Leaf • Parent • Children • Ancestor / Proper ancestor • Descendant / Proper descendant • Level of a node • Height of a node / tree • Degree of a node / tree • Depth of node • Path • Acyclic graph
descendants of “a” a root, height=4, depth=level=0 degree=1 proper descendants of “a” j b k c interior node, height=2, depth=level=2 degree=2 g m d l i h f e degree=0 leaf, height=0, depth=level=4 degree of tree = 2 height of tree = 4
Implementing a Tree • Nodes and Links Node { Object value; Node lchild; Node rchild; } // Node A B C ▲ ▲ ▲ D ▲=null link ▲ ▲
Implementing a Tree A: 0 1 2 3 4 5 6 7 8 9 - A B C - - D - - - • One array • A[1] is root • lchild of A[i] is A[2i] • rchild of A[i] is A[2i+1] • “-” means array element • is null / not used • A[0] not used as a node • A[0] may be used to hold • general info (e.g., • number of nodes in tree) A B C ▲ ▲ ▲ D ▲=null link ▲ ▲
Traversals • Preorder N L R preorder (Node t) if (t == null) return; visit (t.value()); preorder (t.lchild()); preorder (t.rchild()); } // preorder
Traversals • Inorder • L N R inorder (Node t) if (t == null) return; inorder (t.lchild()); visit (t.value()); inorder (t.rchild()); } // inorder
Traversals • Postorder • L R N postorder (Node t) if (t == null) return; postorder (t.lchild()); postorder (t.rchild()); visit (t.value()); } // postorder
a j b k c g m d l i h f e preorder: a j k m l b c g i h d f e inorder: m k l j a b i g h c f d e postorder: m l k j i h g f e d c b a
K-ary Trees a q c e f b d n m i p g k j degree of tree = 4 degree of nodes f and n = 3 height of tree = 3 depth=level of m = 2
K-ary Tree => Binary Tree a q c e f b d n m i p K-ary Binary root root leftmost child left child right sibling right child g k j
a q c e f a b d q c e f n m i p b d n m i p g k j g k j Traversals K-ary Tree Binary Tree Preorder: Inorder: Postorder: Preorder: Inorder: Postorder:
BST Properties • Have all properties of binary tree • Items in left subtree are smaller than items in any node • Items in right subtree are larger than items in any node
Items • Items must be comparable • All items have a unique value • Given two distinct items x and y either • value(x) < value(y) • value(x) > value(y) • If value(x) = value(y) then x = y • It will simplify programming to assume there are no duplicates in our set of items.
Items • Need to map Items to a numerical value • Integers • Value(x) = x • People • Value(x) = ssn • Value(x) = student id
BST Operations • Constructor • Insert • Find • Findmin • Findmax • Remove
BST Operations • Generally Recursive BinaryNode operation( Comparable x, BinaryNode t ) { // End of path if( t == null ) return null; if( x.compareTo( t.element ) < 0 ) return operation( x, t.left ); else if( x.compareTo( t.element ) > 0 ) return operation( x, t.right ); else return t; // Match }
BST Find Method private BinaryNode find( Comparable x, BinaryNode t ) { if( t == null ) return null; if( x.compareTo( t.element ) < 0 ) return find( x, t.left ); else if( x.compareTo( t.element ) > 0 ) return find( x, t.right ); else return t; // Match }
BST Remove Operations • Remove • Node is leaf • Remove node • Node has one child • Replace node with child • Node has two children • Replace node with smallest child of right subtree.
Remove method private BinaryNode remove( Comparable x, BinaryNode t ) { if( t == null ) return t; // Item not found; do nothing if( x.compareTo( t.element ) < 0 ) t.left = remove( x, t.left ); else if( x.compareTo( t.element ) > 0 ) t.right = remove( x, t.right ); else if( t.left != null && t.right != null ) // Two children { t.element = findMin( t.right ).element; t.right = remove( t.element, t.right ); } else t = ( t.left != null ) ? t.left : t.right; return t; }
Internal Path Length • Review depth/height • Depth • Depth is number of path segments from root to node • Depth of node is distance from root to that node. • Depth is unique • Depth of root is 0
Internal Path Length • Height • Height is maximum distance from node to a leaf. • There can be many paths from a node to a leaf. • The height of the tree is another way of saying height of the root.
Internal Path Length • IPL is the sum of the depths of all the nodes in a tree • It gives a measure of how well balanced the tree is.
Internal Path Length N = 4 IPL = 1 + 1 + 2 = 4 1 1 2
Internal Path Length N = 4 IPL = 1 + 2 + 3 = 6 1 2 3
1 1 1 2 2 3 Average IPL for N nodesN = 4 • Calculate IPL of all possible trees 1 2 2
Where do BST fit in • Simple to understand • Works for small datasets • Basis for more complicated trees • Using inheritance can implement • AVL trees • Splay trees • Red Black trees