【发布时间】:2018-02-08 21:30:41
【问题描述】:
实际上我正在尝试制作二叉搜索树,但 self.value 中有一个 nonetype ..所以有一个错误说
class Tree:
def __init__(self,initval=None):
self.value=initval
if self.value:
self.left=Tree()
self.right=Tree()
else :
self.left=None
self.right=None
return
def isempty(self):
return (self.value==None)
def isleaf(self):
return (self.left.isempty() and self.right.isempty())
# convert a leaf node to an empty node
def makeempty(self):
self.value=None
self.left=None
self.right=None
return
def copyright(self):
self.value=self.right.value
self.left=self.right.left
self.right=self.right.right
return
def find(self,v):
if self.isempty():
return (False)
if self.value==v:
return (True)
if v<self.value:
return (self.left.find(v))
if v>self.value:
return (self.right.find(v))
def insert(self,v):
if self.isempty():
self.value==v
self.left=Tree()
self.right=Tree()
if self.value==v:
return
if v < self.value:
self.left.insert(v)
return
if v >self.value:
self.right.insert(v)
return
def maxval(self):
if self.right.isempty():
return(self.value)
else:
return (self.right.maxval())
def delete(self,v):
if self.isempty():
return
if v<self.value:
self.left.delete(v)
if v>self.value:
self.right.delete(v)
if v==self.value:
if self.isleaf():
self.makeempty()
elif self.left.isempty():
self.copyright()
else:
self.value=self.left.maxval()
self.left.delete(self.left.maxval())
return
def inorder(self):
if self.isempty():
return([])
else:
return (self.left.inorder()+[self.value]+self.right.inorder())
def __str__(self):
return(str(self.inorder()))
l=Tree(4)
for i in [1,3,2,6,8,55,44]:
l.insert(i)
print(l)
【问题讨论】:
-
在你的 find 函数中,你永远不会确保值不是
None。而且,为什么要在二叉树上保存一个存储None值的节点?感觉不对,您应该删除该节点,并将其父子设置为 None。
标签: python