加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在构建树时如何通过引用传递?

发布时间:2020-12-17 17:40:37 所属栏目:Python 来源:网络整理
导读:我想创建一个对象,让我们称其为模型,其中包括属性,二叉树的根.我希望该模型对象具有一种构建特定深度的二叉树的方法. 我创建了一个这样的类,模型,它使用树节点类binary_tree_node,如下所示: class binary_tree_node: def __init__(self,data): self.data =

我想创建一个对象,让我们称其为模型,其中包括属性,二叉树的根.我希望该模型对象具有一种构建特定深度的二叉树的方法.

我创建了一个这样的类,模型,它使用树节点类binary_tree_node,如下所示:

class binary_tree_node:
    def __init__(self,data):
        self.data = data
        self.left_child = None
        self.right_child = None

class model:
    def __init__(self,max_depth = 3):
        self.root = None
        self.max_depth = max_depth

    def build_tree(self):
        self.build_tree_recursive_helper(self.root,0)

    def build_tree_recursive_helper(self,node,current_depth):
        # create the new node
        node = binary_tree_node('data')

        # check base case
        if current_depth >= self.max_depth:
            return

        # make recursive calls
        self.build_tree_recursive_helper(node.left_child,current_depth + 1)
        self.build_tree_recursive_helper(node.right_child,current_depth + 1)

我希望能够实例化模型,构建树,然后对树进行自省,就像这样

m = model()
m.build_tree()
print(m.root.data)
>>> 'data'

但是相反,在尝试反省时,我得到以下信息:

m = model()
m.build_tree()
print(m.root.data)
AttributeError                            Traceback (most recent call last)
<ipython-input-138-eaa2b3c07e85> in <module>
      1 m = model()
      2 m.build_tree()
----> 3 print(m.root.data)

AttributeError: 'NoneType' object has no attribute 'data'

这违反了我的理解,即python传递对象引用而不是值.

如何修改我的binary_tree_node和模型类以实现预期的结果?

最佳答案
为什么不返回构建的节点并获取引用,如下所示:

max_depth = 4

def build_tree_recursive_helper(current_depth): 
    # check base case
    if current_depth >= max_depth:
        return None 

    node = binary_tree_node('data')

    # make recursive calls
    node.left_child = build_tree_recursive_helper(current_depth + 1)
    node.right_child = build_tree_recursive_helper(current_depth + 1)

    return node

请注意,您必须将自身放回实现中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读