与Python的二进制树

时间:2016-03-21 20:37:21

标签: python-2.7 binary-tree

我不明白我在哪里犯了错误,以下是创建树的代码,但它从不创建树。我认为make_tree函数存在一些逻辑错误。

    class node:

    def __init__(self, a):
        self.a=a
        self.l=None
        self.r=None


class tree:
    def __init__(self, a,maxd=5):
        self.s=node(a)
        self.maxd=maxd

    def make_tree(self, n,d=0):

        if(self.maxd<d):
            return n
        else:

            n=node(d)
            n.a=d
            self.make_tree( n.l,d+1)
            self.make_tree(n.r,d+1)

            return n

t=tree(2)
t.s=t.make_tree(t.s)
print 'children ', (t.s.r!=None), (t.s.l!=None)

输出:

  

儿童假错误

想要一棵这样的树:

     o
   /   \
  o     o
/  \   / \
o   o  o  o

1 个答案:

答案 0 :(得分:1)

我认为你期待这条线:

n=node(d)

要做的比在Python中做的更多。该行重新绑定本地名称n,但它不会更改原始n值来自调用代码的位置。

我认为你应该完全跳过nmake_tree函数并简单地使用它的返回值:

def make_tree(self, d=0):
    if d > self.maxd:
        return None
    n = Node(d)
    n.l = self.make_tree(d+1)
    n.r = self.make_tree(d+1)
    return n

你可以用以下内容来称呼它:

tree.s = tree.make_tree()

当然,make_tree可以是常规函数而不是方法,因为它只使用self递归调用自身。