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

2024-09-26 22:53:31 发布

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

我在自学二叉搜索树,在这个程序中,我在树中插入数据,但出现了错误'NoneType' object has no attribute '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()

错误:

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)

救命


Tags: selfrightnodehomedataifdefroot
1条回答
网友
1楼 · 发布于 2024-09-26 22:53:31

您的insert函数假定rnode.rightrnode.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)

相关问题 更多 >

    热门问题