创建一个二叉树

艾伦·佩奇(Ellen Page)

我正在尝试从平面列表创建树。我需要定义一个名为的函数tree_from_flat_list对于位于索引位置的任何节点i,左子节点存储在索引位置2*i,右子节点存储在索引位置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

编辑:仍然停留在我应该为该功能做些什么。任何帮助仍然表示赞赏。

它们之间的间距是树和的高度,l并且r表示它们是左孩子还是右孩子。看起来像:

        10
       /  \
      5    15
          /  \
         11  22

但是我只能得到:

10

我应该如何编辑我的tree_from_flat_list功能,以使其正常工作。任何帮助表示赞赏。谢谢你。

Doctorlove

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章