Python版的
class BinaryTreeNode(object):
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def _find_parent(nodes, i):
i_parent = -1
max_min_val = -float('inf')
for j in range(i):
if max_min_val < nodes[j].val < nodes[i].val:
max_min_val = nodes[j].val
i_parent = j
return i_parent
def gen_bst(arr, n):
if not arr:
return
nodes = []
for num in arr:
nodes.append(BinaryTreeNode(num))
for i in range(1, n):
if nodes[i].val < nodes[i - 1].val:
nodes[i - 1].left = nodes[i]
else:
i_parent = _find_parent(nodes, i)
nodes[i_parent].right = nodes[i]
return nodes[0]
def level_order(root):
ret = []
if not root:
return ret
queue = [root]
while queue:
cur = queue.pop(0)
ret.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
return ret
if __name__ == '__main__':
arr = [8, 3, 1, 6, 4, 7, 10, 14, 13]
n = 9
root = gen_bst(arr, n)
ret = level_order(root)
print(' '.join([str(num) for num in ret]))