python教程—使用自我。作为默认参数- Python-Python实用宝典

python教程—使用自我。作为默认参数- Python

我试图简化我的一个家庭作业问题,使代码更好一些。我用的是二叉搜索树。现在,我的Tree()类中有一个函数,它查找所有元素并将它们放入一个列表中。

我试图简化我的一个家庭作业问题,使代码更好一些。我用的是二叉搜索树。现在,我的Tree()类中有一个函数,它查找所有元素并将它们放入一个列表中。

    tree = Tree() #insert a bunch of items into tree

然后使用makeList()函数从树中获取所有节点,并将它们放入一个列表中。
要调用makeList()函数,我执行tree.makeList(tree.root)。对我来说,这似乎有点重复。我已经用tree调用了tree对象。所以这棵树。root只是浪费一点打字时间。

现在的makeList函数是:

    def makeList(self, aNode): if aNode is None: return [] return [aNode.data] + self.makeList(aNode.lChild) + self.makeList(aNode.rChild)

我希望将阳极输入设置为默认参数,如aNode = self。root(不工作),这样我就可以用这个tree.makeList()运行函数。

第一个问题是,为什么这行不通?
第二个问题是,有没有一种方法可以让它起作用?如您所见,makeList()函数是递归的,因此我不能在函数的开头定义任何东西,否则将得到一个无限循环。

<强>编辑< /强>
以下是所有要求的代码:

    class Node(object): def __init__(self, data): self.data = data self.lChild = None self.rChild = None class Tree(object): def __init__(self): self.root = None def __str__(self): current = self.root def isEmpty(self): if self.root == None: return True else: return False def insert (self, item): newNode = Node (item) current = self.root parent = self.root if self.root == None: self.root = newNode else: while current != None: parent = current if item < current.data: current = current.lChild else: current = current.rChild if item < parent.data: parent.lChild = newNode else: parent.rChild = newNode def inOrder(self, aNode): if aNode != None: self.inOrder(aNode.lChild) print aNode.data self.inOrder(aNode.rChild) def makeList(self, aNode): if aNode is None: return [] return [aNode.data] + self.makeList(aNode.lChild) + self.makeList(aNode.rChild) def isSimilar(self, n, m): nList = self.makeList(n.root) mList = self.makeList(m.root) print mList == nList

回答

larsmans 回答了您的第一个问题

对于您的第二个问题,您能否在跳过之前简单地查看一下以避免递归?

    def makeList(self, aNode=None): if aNode is None: aNode = self.root treeaslist = [aNode.data] if aNode.lChild: treeaslist.extend(self.makeList(aNode.lChild)) if aNode.rChild: treeaslist.extend(self.makeList(aNode.rChild)) return treeaslist

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论