def _to_list(node): if __name__ == '__main__': t = Tree() t.add(5) t.add(3) t.add(4) t.add(2) t.add(7) t.add(6) t.add(8)
def main(): level = int(sys.argv[1]) for _ in range(100): r_array = list(random.randint(-20, 20) for _ in range(7)) r_in = ' '.join(map(str, r_array)) user_out = os.popen('echo "{}" | ./a.out'.format(r_in)).read().strip() user_array = list(map(int, user_out.split())) print('{}\t->\t{}'.format(r_in, user_out)) tree = Tree() tree.add(r_array) if level == 0: expected_array = breadth_first_search(tree) elif level == 1: expected_array = pre_order_search(tree) elif level == 2: expected_array = post_order_search(tree) else: raise NotImplementedError assert user_array == expected_array, 'expected {}, got {}'.format( expected_array, user_array)
from bst import Tree tree = Tree() tree.add(2) tree.add(3) tree.add(1) tree.print_tree()
return 0 if node and (node.left is None and node.right is None): return 1 if node is not None: height = max(_height(node.left), _height(node.right)) + 1 else: height = 0 return height def height(tree): if tree is None: return 0 if tree and (tree.get_root().left is None and tree.get_root().right is None): return 1 return _height(tree.get_root()) if __name__ == '__main__': t1 = Tree() t1.add(5) t1.add(1) t1.add(3) t1.add(6) t1.add(7) t1.add(4) print height(t1)
if current is None: return None while ((s.is_empty() is not True) or (current is not None)): if current is not None: s.push(current) current = current.left else: current = s.get_top() s.pop() print " --> " + str(current.value) current = current.right if __name__ == '__main__': t = Tree() t.add(5) t.add(2) t.add(4) t.add(1) t.add(7) t.add(6) t.add(8) t.print_tree() inorder(t)
return(_is_identical(n1.left,n2.left), _is_identical(n1.right,n2.right)) else: return False def is_identical(t1, t2): if t1 is None and t2 is None: return True else: if t1 is None or t2 is None: return False else: if (t1.get_root().value == t2.get_root().value): return (_is_identical(t1.get_root().left,t2.get_root().left) and _is_identical(t1.get_root().right, t2.get_root().right)) if __name__ == '__main__': t1 = Tree() t2 = Tree() t1.add(2) t1.add(1) t1.add(3) t2.add(2) t2.add(1) t2.add(3) print is_identical(t1,None)
return has_key(node.right, key) def floor_ceil(node, key, floor, ceil): while node: if node.value == key: floor = node ceil = node elif key < node.value: ceil = node node = node.left else: floor = node node = node.right if __name__=='__main__': t = Tree() t.add(6) t.add(2) t.add(3) t.add(9) t.add(7) t.print_tree() floor = None ceil = None floor_ceil(t.get_root(),1,floor,ceil) print floor, ceil
node.value = bst[index] print node.value index = index + 1 convert_to_bst(node.right,index) def to_list(node): if node is None: return to_list(node.left) bst.append(node.value) to_list(node.right) if __name__ == '__main__': t = Tree() t.add(5) t.add(3) t.add(6) t.add(9) t.add(2) t.add(4) t.print_tree() to_list(t.get_root()) qsort(bst) index = 0 convert_to_bst(t.get_root(),index)
node.value = 0 if node is not None: _delete(node.left) _delete(node.right) node.value = 0 def delete(tree): if tree is None: return None if tree: tree.get_root().value = 0 _delete(tree.get_root()) if __name__ == '__main__': t1 = Tree() t1.add(2) t1.add(1) t1.add(3) t1.add(5) t1.add(4) t1.add(6) t1.print_tree() delete(t1) t1.print_tree()
def preorder(node): if node is None: return None print node.value preorder(node.left) preorder(node.right) return if __name__ == '__main__': t = Tree() t.add(5) t.add(8) t.add(2) t.add(3) t.add(1) t.add(6) t.add(9) t.print_tree() print "-- Preorder -- " preorder(t.get_root()) print "-- End -- "