“NoneType”对象在python中的二叉树实现中没有属性错误

2024-09-22 16:29:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了下面的代码来简单地用python实现一个二叉树。当我调用“查找节点”方法时,我得到“AttributeError:'NoneType'对象没有属性'data'”。我知道这个错误是什么,但是我不知道为什么当我调用“find\u Node”方法时它才会出现。任何线索都将不胜感激。在

这是我的代码:

#!/usr/bin/env python2

class BinaryTree:

    class Node:

        def __init__(self,data,left=None,right=None):
            self.data=data
            self.left=left
            self.right=right

        def get_RightChild(self):
            return self.right

        def get_LeftChilld(self):
            return self.left

        def get_Nodedata(self):
            return self.data

        def set_NodeData(self,data):
            self.data=data

    def __init__(self,rootdata):
        self.root=self.Node(rootdata)
        self.size=1

    def get_Root(self):
        return self.root

    def get_Size(self):
        return self.size


    def insert_LeftNode(self,data,root):
        if root.left==None:
            root.left=self.Node(data)
        else:
            self.insert_LeftNode(data,root.left)
        self.size+=1

    def insert_RightNode(self,data,root):
        if root.right==None:
            root.right=self.Node(data)
        else:
            self.insert_RightNode(data,root.right)
        self.size+=1

    #needs revision - does not work properly
    def find_Node(self,data,root):
        if root.data == data:
            return 1
        self.find_Node(data,root.right)
        self.find_Node(data,root.left)
        return 0

    def preorder_Traverse(self,root):
        if root != None:
            print root.data,
            self.preorder_Traverse(root.left)
            self.preorder_Traverse(root.right)

    def inorder_Traverse(self,root):
        if root!=None:
            self.inorder_Traverse(root.left)
            print root.data,
            self.inorder_Traverse(root.right)

    def postorder_Traverse(self,root):
        if root!=None:
            self.postorder_Traverse(root.left)
            self.postorder_Traverse(root.right)
            print root.data,


if __name__=="__main__":
    mybinary=BinaryTree(314)
    mybinary.insert_LeftNode(6,mybinary.get_Root())
    mybinary.insert_RightNode(7,mybinary.get_Root())
    mybinary.insert_LeftNode(2,mybinary.root.left)
    mybinary.insert_RightNode(4,mybinary.root.left)

    mybinary.inorder_Traverse(mybinary.get_Root())

    print 

    if mybinary.find_Node(7,mybinary.get_Root()): 
        print "found"
    else: 
        print "Not Found!"

Tags: selfrightnonenodedatagetreturnif
1条回答
网友
1楼 · 发布于 2024-09-22 16:29:36

检查是rootNone,也可以是root.left或{},将{}方法更改为下面的代码

def find_Node(self,data,root):
    if(root is None):
        return 0
    if root.data == data:
        return 1
    return self.find_Node(data,root.right) or self.find_Node(data,root.left)

相关问题 更多 >