簡體   English   中英

如何在 python 中訪問不同 class 的屬性

[英]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並且您必須使用Nodeprint_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM