Python 为什么我的参数/对象显示为非类型对象?

Python 为什么我的参数/对象显示为非类型对象?,python,binary-search-tree,control-flow,Python,Binary Search Tree,Control Flow,我在自学二进制搜索树,在这个程序中,我在树中插入数据,但错误'NoneType'对象没有属性“data”错误正在发生 from collections import deque class Node: def __init__(self, data): self.data = data self.left = None self.right = None def insert(rnode, data): if data >

我在自学二进制搜索树,在这个程序中,我在树中插入数据,但错误
'NoneType'对象没有属性“data”
错误正在发生

from collections import deque
class Node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

def insert(rnode, data):
    if data > rnode.data:
        insert(rnode.right, data)
        rnode.right.data = data
        return print('Node inserted')
    if data < rnode.data:
        insert(rnode.left, data)
        rnode.left.data = data
        return print('Node inserted')

def bfs():
    q = deque()
    temp = self.root
    while temp:
        print(temp.data)
        q.append(temp.left)
        q.append(temp.right)
        temp = q.popleft()


root = Node(8)
insert(root, 3)
bfs()
从集合导入数据
类节点:
定义初始化(自身,数据):
self.data=数据
self.left=无
self.right=无
def插入(rnode,数据):
如果数据>rnode.data:
插入(rnode.right,数据)
rnode.right.data=数据
返回打印('插入节点')
如果数据
错误:

Exception has occurred: AttributeError
'NoneType' object has no attribute 'data'
  File "/home/mayank/Documents/datastructures/binarysearchtree.py", line 9, in insert
    if data > rnode.data:
  File "/home/mayank/Documents/datastructures/binarysearchtree.py", line 14, in insert
    insert(rnode.left, data)
  File "/home/mayank/Documents/datastructures/binarysearchtree.py", line 29, in <module>
    insert(root, 3)
发生异常:AttributeError “非类型”对象没有属性“数据” 文件“/home/mayank/Documents/datastructures/binarysearchtree.py”,第9行,插入 如果数据>rnode.data: 文件“/home/mayank/Documents/datastructures/binarysearchtree.py”,插入部分第14行 插入(rnode.left,数据) 文件“/home/mayank/Documents/datastructures/binarysearchtree.py”,第29行,在 插入(根,3)

救命

您的
insert
函数假定
rnode.right
rnode.left
总是指一个可以插入值的树,但如果
rnode
是一个叶子(插入新值时它最终将是叶子),则情况并非如此。
insert
需要为新值创建一个新节点

def insert(rnode, data):
    if data > rnode.data:
        if rnode.right is None:
            rnode.right = Node(data)
        else:
            insert(rnode.right, data)
    if data < rnode.data:
        if rnode.left is None:
            rnode.left = Node(data)
        else:
            insert(rnode.left, data)
def插入(rnode,数据):
如果数据>rnode.data:
如果rnode.right为无:
rnode.right=节点(数据)
其他:
插入(rnode.right,数据)
如果数据
您的
insert
函数假定
rnode.right
rnode.left
总是指一个可以插入值的树,但如果
rnode
是一个叶子(插入新值时,它最终将是叶子),则情况并非如此
insert
需要为新值创建一个新节点

def insert(rnode, data):
    if data > rnode.data:
        if rnode.right is None:
            rnode.right = Node(data)
        else:
            insert(rnode.right, data)
    if data < rnode.data:
        if rnode.left is None:
            rnode.left = Node(data)
        else:
            insert(rnode.left, data)
def插入(rnode,数据):
如果数据>rnode.data:
如果rnode.right为无:
rnode.right=节点(数据)
其他:
插入(rnode.right,数据)
如果数据