我想询问Python中作为类变量的对象的作用域
import numpy as np
class treeNode:
def __init__(self,key):
self.leftChild = None
self.rightChild = None
self.value = key
def insert(root,key):
if root is None:
return treeNode(key)
else:
if root.value == key:
return root
elif root.value<key:
root.rightChild = insert(root.rightChild,key)
else:
root.leftChild = insert(root.leftChild,key)
return root
def insert_1(root,key):
if root is None:
root = treeNode(key)
else:
if root.value<key:
insert_1(root.rightChild,key)
elif root.value>key:
insert_1(root.leftChild,key)
def construct_tree(a):
def insert_1(root,key):
if root is None:
root = treeNode(key)
else:
if root.value<key:
insert_1(root.rightChild,key)
elif root.value>key:
insert_1(root.leftChild,key)
root = treeNode(a[0])
for k in a:
insert_1(root,k)
return root
if __name__ == '__main__':
np.random.seed(1)
a = np.random.rand(12)
tree = treeNode(a[0])
for k in a:
insert(tree,k)
for k in a:
insert_1(tree,k)
tree_1 = construct_tree(a)
函数insert()
生成整个树,而不返回任何内容的insert_1()
和construct_tree()
则无法生成整个树。是否有一个函数可以递归地构造整个树而不使用return
语句?多谢各位
在
insert
中,递归的基本情况是插入到空子树中,表示为None
作为root
传入。它之所以有效,是因为在这种情况下,您可以创建并返回一个新的treeNode
,并且调用者将使用返回值做正确的事情如果您不想使用
return
,则需要将该基本情况向上推到调用代码,以便在添加叶节点时避免调用:这比使用
return
的版本要重复一些,因为每个可能的新子级都需要重复基本情况,但是递归行要短一些,因为它们不需要在任何地方赋值正如上面的断言所说,您不能在空树(由
None
表示)上有效地调用它,因为它无法更改对None
根的现有引用。所以construct_tree
可能需要特殊的逻辑来构造空树。该函数的当前版本根本不处理空输入(并且重复尝试第二次将根值添加到树中):相关问题 更多 >
编程相关推荐