python 的二叉树

Binary tree with python

我不明白我哪里出错了,下面是创建树的代码,但它从来没有创建树。我认为 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)

输出:

children False False

想要一棵这样的树:

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

我想你在期待这条线:

n=node(d)

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

我认为您应该完全跳过将 n 传递给 make_tree 函数,而是简单地使用它的 return 值:

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 递归调用自己。