import "io" manifest { node_data = 0, node_left = 1, node_right = 2, sizeof_node = 3 } let new_node(x) be { let p = newvec(sizeof_node); p ! node_data := x; p ! node_left := nil; p ! node_right := nil; resultis p } let add_to_tree(ptr, value) be { if ptr = nil then resultis new_node(value); test value < ptr ! node_data then ptr ! node_left := add_to_tree(ptr ! node_left, value) else ptr ! node_right := add_to_tree(ptr ! node_right, value); resultis ptr } let inorder_print(ptr) be { if ptr = nil then return; inorder_print(ptr ! node_left); out("%d ", ptr ! node_data); inorder_print(ptr ! node_right) } let start() be { let heap = vec 10000; let tree = nil; init(heap, 10000); for i = 1 to 20 do { let v = random(99); tree := add_to_tree(tree, v); out("%d ", v) } out("\n"); inorder_print(tree); out("\n") }