230 likes | 336 Views
12.Binary Search Trees. Hsu, Lih-Hsing. 12.1 What is a binary search tree?. Binary-search property :
E N D
12.Binary Search Trees Hsu, Lih-Hsing
12.1 What is a binary search tree? • Binary-search property: Let x be a node in a binary search tree. If y is a node in the left subtree of x, then key[y] key[x]. If y is a node in the right subtree of x, then key[x] key[y].
Inorder tree walk INORDER_TREE_WALK(x) 1 if 2 then INORDER_TREE_WALK(left[x]) 3 print key[x] 4 INORDER_TREE_WALK(right[x])
Theorem 12.1 If x is the root of an n-node subtree, then the call INORDER-TREE-WALK(x) takes (n) time.
Preorder tree walk • Postorder tree walk
TREE_SEARCH(x,k) TREE_SEARCH(x,k) 1 ifor 2 then returnx 3 if 4 then return TREE_SEARCH(left[x],k) 5 else return TREE_SEARCH(right[x],k)
ITERATIVE_SEARCH(x,k) ITERATIVE_SEARCH(x,k) 1 While or 2 do if 3 then 4 then 5 returnx
MAXIMUM and MINIMUM • TREE_MINIMUM(x) 1 while left[x] NIL 2 dox left[x] 3 returnx • TREE_MAXIMUM(x) 1 while right[x] NIL 2 dox right[x] 3 returnx
TREE_SUCCESSOR TREE_SUCCESSOR 1 if 2 then returnTREE_MINIMUM(right[x]) 3 4 whileand 5 do 6 7 returny
Theorem 12.2 • The dynamic-set operations, SEARCH, MINIMUM, MAXIMUM, SUCCESSOR, and PREDECESSOR can be made to run in O(h) time on a binary search tree of height h.
Insertion Tree-Insert(T,z) 1 y NIL 2 x root[T] 3 whilex NIL 4 doy x 5 ifkey[z] < key[x] 6 thenx left[x] 7 elsex right[x] 8 p[z] y
9 ify = NIL 10 thenroot[T] z tree T was empty 11 elseifkey[z] < key[y] 12 thenleft[y] z 13 elseright[y] z
Deletion Tree-Delete(T,z) 1 ifleft[z] = NILorright[z] = NIL 2 theny z 3 elsey Tree-Successor(z) 4 if left[y] NIL 5 thenx left[y] 6 elsex right[y] 7 ifx NIL 8 thenp[x] p[y]
9 ifp[y] = NIL 10 thenroot[T] x 11 else ify = left[p[y]] 12 thenleft[p[y]] x 13 elseright[p[y]] x 14 ify z 15 thenkey[z] key[y] 16 copy y’s satellite data into z 17 returny
Theorem 12.3 • The dynamic-set operations, INSERT and DELETE can be made to run in O(h) time on a binary search tree of height h.