[英]How to access an attribute of different class in python
我正在尝试形成一个二叉搜索树并打印它。 我收到以下错误:
self.root.left.printtree() AttributeError: 'Node' object has no attribute 'printtree'
class Node:
def __init__(self,data):
self.data=data
self.left=None
self.right=None
class Binarysearchtree():
def __init__(self,data):
self.root=Node(data)
def insert(self,data):
if self.root.data>data:
if self.root.left==None:
self.root.left=Node(data)
else:
self.root.left.insert(data)
elif self.root.data<data:
if self.root.right==None:
self.root.right=Node(data)
else:
self.root.right.insert(data)
else:
self.root.data=data
def printtree(self):
if self.root.left:
self.root.left.printtree()
print(self.root.data)
if self.root.right:
self.root.right.printtree()
a=Binarysearchtree(23)
a.insert(20)
a.insert(24)
a.printtree()
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def print_tree(self):
print(self.data)
if self.left:
self.left.print_tree()
if self.right:
self.right.print_tree()
class BinarySearchTree:
def __init__(self, data):
self.root = Node(data)
def insert(self,data):
if self.root.data > data:
if self.root.left is None:
self.root.left = Node(data)
else:
self.root.left.insert(data)
elif self.root.data < data:
if self.root.right is None:
self.root.right = Node(data)
else:
self.root.right.insert(data)
else:
self.root.data = data
def print_tree(self):
self.root.print_tree()
a = BinarySearchTree(23)
a.insert(20)
a.insert(24)
a.print_tree()
您需要将您的print_tree
function 放在Node
class 中。 您还必须更改您的print_tree
function BinarySearchTree
并且您必须使用Node
的print_tree
function
不要忘记尊重snake case
约定
你可以像这样创建 BST
class Node:
def __init__(self,data):
self.data=data
self.left=None
self.right=None
def createNode(root_node, data):
while(root_node != None):
if data < root_node.data:
if root_node.left == None:
root_node.left = Node(data)
break
else:
root_node = root_node.left
else:
if root_node.right == None:
root_node.right = Node(data)
break
else:
root_node = root_node.right
#In order Traversal
def inOrderTravel(r):
if r == None:
return
inOrderTravel(r.left)
print(r.data)
inOrderTravel(r.right)
class Binarysearchtree:
def __init__(self,data):
self.root = Node(data)
def insert(self,data):
if data < self.root.data:
ref_root = self.root
createNode(ref_root, data)
else:
ref_root = self.root
createNode(ref_root, data)
return self.root
a = Binarysearchtree(23)
r = a.insert(20)
r = a.insert(24)
r = a.insert(25)
r = a.insert(0)
inOrderTravel(r)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.