class node:
def __init__(self,data):
self.data=data
self.left=None
self.right=None
class btree:
def __init__(self):
self.root=None
def insertt(self,root, data):
if root==None:
root=node(data)
elif root.data > data:
self.insertt(self,root.left, data)
else:
self.insertt(self,root.right, data)
def insert(self,data):
self.insertt(self.root, data)
def printall(self):
self.printtall(self.root)
def printtall(self,root):
if root==None:
print "reached end "
else:
printtall(root.left)
print root.data
printtall(root.right)
a=btree()
a.insert(2)
a.insert(1)
a.insert(6)
a.insert(3)
a.printall()
所以self.root总是None。我是一名C ++程序员,我发现很难处理Python,因为这里找不到引用调用。我该怎么做才能让它发挥作用?谢谢你的帮助。
答案 0 :(得分:1)
这是我的解决方案。请注意,我将类名更改为混合大小写,以遵循标准约定,并使其更容易避免名称冲突。
class Node(object):
def __init__(self, data):
self.data = data
self.left = None
self.right = None
class BTree(object):
def __init__(self):
self.root = None
def insert(self, data):
self.root = self.insertt(self.root, Node(data))
def insertt(self, root, node):
if root == None:
root = node
elif node.data < root.data:
root.left = self.insertt(root.left, node)
else:
root.right = self.insertt(root.right, node)
return root
def printall(self):
self.printtall(self.root, 0)
def printtall(self, root, indent):
if root == None:
print ". " * indent + "(empty)"
else:
print ". " * indent + str(root.data)
self.printtall(root.left, indent + 1)
self.printtall(root.right, indent + 1)
a = BTree()
a.insert(2)
a.insert(1)
a.insert(6)
a.insert(3)
a.printall()
这是输出。我将打印功能更改为使用前缀而不是中缀排序,因为我发现它更清晰,但如果您愿意,可以轻松更改它:
2
. 1
. . (empty)
. . (empty)
. 6
. . 3
. . . (empty)
. . . (empty)
. . (empty)
答案 1 :(得分:1)
这是工作代码,我将在评论中解释问题。
class node:
def __init__(self,data):
self.data=data
self.left=None
self.right=None
class btree:
def __init__(self):
self.root = None
def insertt(self, root, data):
if root==None:
#earlier you tried to return here which leads to dead end.
self.root = node(data)
else:
#You need the assign the data here, as if you'll
#try to update in the above if statement you are doing
#nothing but just updating the root again and again
if root.data > data:
if root.left == None:
root.left = node(data)
else:
self.insertt(root.left, data)
else:
if root.right == None:
root.right = node(data)
else:
self.insertt(root.right, data)
def insert(self,data):
self.insertt(self.root, data)
def printtall(self,root):
#inorder traversal
if root != None:
self.printtall(root.left)
print (root.data)
self.printtall(root.right)
def printall(self):
self.printtall(self.root)
a=btree()
a.insertt(a.root, 2)
a.insertt(a.root, 1)
a.insertt(a.root, 6)
a.insertt(a.root, 3)
a.printall()
输出 -
1
2
3
6
答案 2 :(得分:0)
在函数&#34; insertt&#34;
的赋值之前你有一个return语句