gpt4 book ai didi

python - 创建二叉树

转载 作者:行者123 更新时间:2023-11-28 21:43:27 25 4
gpt4 key购买 nike

我正在尝试从平面列表创建一棵树。我需要定义一个名为 tree_from_flat_list 的函数。对于索引位置i的任意节点,左 child 存储在索引位置2*i,右 child 存储在索引位置2*i+ 1。 :

class BinaryTree:

def __init__(self, data):
self.data = data
self.left = None
self.right = None

def get_left(self):
return self.left

def get_right(self):
return self.right

def set_left(self, tree):
self.left = tree

def set_right(self, tree):
self.right = tree

def set_data(self, data):
self.data = data

def get_data(self):
return self.data

def create_string(self, spaces):
info = ' ' * spaces + str(self.data)
if self.left != None:
info += '\n(l)' + self.left.create_string(spaces+4)
if not self.right == None:
info += '\n(r)' + self.right.create_string(spaces+4)
return info

def __str__(self):
representation = self.create_string(0)
return representation

def tree_from_flat_list(node_list):
if node_list != None:
root_index = 1
list1 = []
list2 = []
root = node_list[root_index]
left_sub_tree = list1.append(node_list[2*root_index])
right_sub_tree = list2.append(node_list[2*root_index+1])
tree = BinaryTree(root)
tree.set_left(tree_from_flat_list(left_sub_tree))
tree.set_right(tree_from_flat_list(right_sub_tree))
return tree

当我尝试运行它时:

def test():
flat_list = [None, 10, 5, 15, None, None, 11, 22]
my_tree = tree_from_flat_list(flat_list)
print(my_tree)

test()

我应该得到输出:

10
(l) 5
(r) 15
(l) 11
(r) 22

编辑:仍然坚持我应该为该功能做些什么。仍然感谢任何帮助。

中间的空格量是树的高度,lr 表示它们是左 child 还是右 child 。这看起来像:

        10
/ \
5 15
/ \
11 22

但我只得到:

10

我应该如何编辑我的 tree_from_flat_list 函数才能使其正常工作。任何帮助表示赞赏。谢谢。

最佳答案

您的问题的本质在于以下几行:

    left_sub_tree = list1.append(node_list[2*root_index])
right_sub_tree = list2.append(node_list[2*root_index+1])

追加函数集不返回任何东西——它追加到列表中。这会将您的左右子树设置为 None

关于python - 创建二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42202666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com