问题描述
给定一个从小大到大排序后的数字列表,将该列表转化成二叉搜索树。列表中不存在重复元素,层次输出二叉搜索树的节点。
测试样例
# Input:
[1, 2, 3, 4, 5, 6, 7]
#Output:
[4, 2, 6, 1, 3, 5, 7]
# [4, 2, 6, 1, 3, 5, 7]
# 4
# / \
# 2 6
#/ \ / \
#1 3 5 7
内容首发于微信公众号IT信息教室,如果您想学习更多AI相关的技能,欢迎搜索关注或微信扫描下方二维码关注~~
图解思路
参考代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
class Node:
def __init__(self, value, left = None, right = None):
self.value = value
self.left = left
self.right = right
# 广度优先搜索输出二叉树结点信息
def __str__(self):
nodes = [self]
result = []
while len(nodes):
node = nodes.pop(0)
if not node:
continue
result.append(node.value)
nodes.append(node.left)
nodes.append(node.right)
return str(result)
# O(n)) time, O(n) space
class Solution:
def createBalancedBST(self, nums):
if not nums:
return None
middle = len(nums) // 2
left = self.createBalancedBST(nums[0 : middle])
right = self.createBalancedBST(nums[middle + 1 :])
return Node(nums[middle], left, right)
# Test Program
nums = [1, 2, 3, 4, 5, 6, 7]
result = Solution().createBalancedBST(nums)
print(result)
# [4, 2, 6, 1, 3, 5, 7]