Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ';功能';对象没有二叉树属性_Python_Binary Tree - Fatal编程技术网

Python ';功能';对象没有二叉树属性

Python ';功能';对象没有二叉树属性,python,binary-tree,Python,Binary Tree,我试图打印一个二叉树,我的实现如下 class Node: def __init__(self, val): self.l = None self.r = None self.v = val def get_right_child(self): return self.r def get_left_child(self): return self.l def __str__(se

我试图打印一个二叉树,我的实现如下

class Node:
    def __init__(self, val):
        self.l = None
        self.r = None
        self.v = val

    def get_right_child(self):
        return self.r

    def get_left_child(self):
        return self.l

    def __str__(self):
        return self.v.__str__()

    def __repr__(self):
        return self.v.__str__()


class Binary_tree:
    def __init__(self):
        self.root = None

    def get_root(self):
        return self.root

    def set_root(self, val):
        self.root=Node(val)

    def is_empty(self):
        if self.root==None:
            return True
        else:
            return False

    def add(self, val):
        if(self.root == None):
            self.root = Node(val)
        else:
            self._add(val, self.root)

    def _add(self, val, node):
        if(val < node.v):
            if(node.l != None):
                self._add(val, node.l)
            else:
                node.l = Node(val)

        else:
            if(node.r != None):
                self._add(val, node.r)
            else:
                node.r = Node(val)

    def find(self, val):
        if(self.root != None):
            return self._find(val, self.root)
        else:
            return None

    def _find(self, val, node):
        if(val == node.v):
            return node
        elif(val < node.v and node.l != None):
            self._find(val, node.l)
        elif(val > node.v and node.r != None):
            self._find(val, node.r)




    def to_string(self):
        return self.to_string_tree(self.root, 0)

    def __str__(self):
        return self.to_string_tree2(self.get_root,0)
    def __repr__(self):
        return self.to_string_tree2(self.get_root,0)

    def to_string_tree2(self, node, indent):

        def is_leaf(node):

            if(node.get_right_child()==None and node.get_left_child()==None):
                return True
            else:
                return False

        indentation=""
        result=""
        i=0
        if(node!=None):
           i=0

           while(i<indent):
               indentation=indentation+(" ")
               i=i+1
           if(is_leaf(node)):
               result=result+"["+node.v+"]"+"\n"
           else:
               result=result+"("+node.v+")"+"\n"
               if(node.l!=None):
                   result=result+indentation+"Izq.: "+self.to_string_tree2(node.l,indent+2)
               if(node.r!=None):
                   result=result+indentation+"Der.: "+self.to_string_tree2(node.r,indent+2)

        return result
错误 我得到一个错误:

if(node.get_right_child()==None and node.get_left_child()==None):

AttributeError: 'function' object has no attribute 'get_right_child'

我不明白为什么会出现这样的错误,编译器也不会将节点识别为“节点”(当我放置点时,除了每个对象的默认函数外,不推荐任何函数)

在类
二叉树
中,通过调用
self.to\u string\u tree2来实现一个
\u str\u
\u repr\u
函数(…)
。但是您可以使用
self.get_root
执行此操作。请注意,您忘记调用函数。因此,您应该添加括号。通过使用
self.get_root
本身,您可以将对方法的引用作为参数传递给函数调用

因此,您可以通过以下方式解决此问题:

class Binary_tree:

    # …

    def __str__(self):
        return self.to_string_tree2(self.get_root(),0)

    def __repr__(self):
        return self.to_string_tree2(self.get_root(),0)
类二叉树:
# …
定义(自我):
返回self.to_string_tree2(self.get_root(),0)
定义报告(自我):

返回self.to_string_tree2(self.get_root(),0)
您正在将
self.get_root
作为参数传递给
to_string_tree2
,而不是
self.root
self.get_root()
。通常情况下,人们不会为Python中的这些琐碎的getter而烦恼。啊,“组项目”我没有意识到这一点,谢谢!!!
class Binary_tree:

    # …

    def __str__(self):
        return self.to_string_tree2(self.get_root(),0)

    def __repr__(self):
        return self.to_string_tree2(self.get_root(),0)