【问题标题】:How to save result of balanced binary tree as an array in python如何在python中将平衡二叉树的结果保存为数组
【发布时间】:2021-02-15 09:19:40
【问题描述】:

下面的 Python 程序将给定的数组元素转换为高度平衡的二叉搜索树 (BST),并打印构造的 BST 的遍历。我想知道如何将结果保存为数组。

class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

def array_to_bst(array_nums):
    if not array_nums:
        return None
    mid_num = len(array_nums)//2
    node = TreeNode(array_nums[mid_num])
    node.left = array_to_bst(array_nums[:mid_num])
    node.right = array_to_bst(array_nums[mid_num+1:])
    return node

def preOrder(node): 
    if not node: 
        return      
    print(node.val)
    preOrder(node.left) 
    preOrder(node.right)   

array_nums = [1,2,3,4,5,6,7]

print("Original array:")
print(array_nums)
result = array_to_bst(array_nums)
print("\nArray to a height balanced BST:")
print(preOrder(result))

【问题讨论】:

    标签: python arrays binary-tree binary-search-tree


    【解决方案1】:

    只需将您的 preOrder(node) 函数更改为:

    def preOrder(node): 
        if node is None: 
            return []
        print(node.val)
        res = [node.val]
        res += preOrder(node.left) 
        res += preOrder(node.right)
        return res
    

    【讨论】:

    • 这个函数把它打印成一个数组。我想将它保存为一个数组,然后从中插入和删除一些值。
    • 此函数打印 preOrder 遍历 将其作为数组返回。如果您不想打印它,只需删除打印语句。此外,它是您的代码,您有 print(preOrder(result)),因此如果您只是复制代码,它将打印返回的数组。
    • 知道了,谢谢。
    • 另一个快速问题,我将 array_nums 更改为 array_nums = np.random.randint(0,100,10) 并引发错误“具有多个元素的数组的真值不明确。使用a.any() 或 a.all()''。有任何想法如何解决它?
    • array_to_bst函数中,将if语句改为if len(array_nums) == 0:
    猜你喜欢
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2015-08-17
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    相关资源
    最近更新 更多