python - Python - 树插入节点
问题描述
下面是我的代码。我无法弄清楚我的插入功能有什么问题。从我正在运行的测试来看,我的树看起来并没有插入新节点。谁能指出我正确的方向?例如,当我运行测试时,树的高度应该是 2,但输出是 3。但我几乎可以肯定长度函数是正确的。
class MyTree():
def __init__(self, data):
# Initialize this node, and store data in it
self.data = data
self.left = None
self.right = None
self.height = 0
self.descendents = 0
def getLeft(self):
# Return the left child of this node, or None
return self.left
def getRight(self):
# Return the right child of this node, or None
return self.right
def getData(self):
# Return the data contained in this node
return self.data
def insert(self, data):
if self.left == None:
self.left = MyTree(data)
self.descendents=1
elif self.right == None:
self.descendents=2
self.right = MyTree(data)
else :
self.left.insert(data)
return self
def getHeight(self):
# Return the height of this node
if self.left==None:
leftheight=0
else:
leftheight=self.left.getHeight()
if self.right==None:
rightheight=0
else:
rightheight=self.right.getHeight()
if self.left==None and self.right==None:
return 0
h=max(leftheight, rightheight) + 1;
self.height=h
return h
下面是测试:
def Test(lib, seed=0, size=10, rounds=10, verbose=False):
random.seed(a=seed)
# Test MyTree
n = random.randint(0, size)
try:
tree = lib.MyTree(n)
except:
if verbose:
print("Error: MyTree not creatable")
return False
h=1
c=2
for i in range(1,size):
n = random.randint(n,n*2)
try:
tree = tree.insert(n)
#print(tree)
except:
# print(c)
if verbose:
print("Error: Tree not insertable")
return False
tH = tree.getHeight()
if CheckHeight(tree) != tH:
if verbose:
print("Error: Tree height calculation incorrect")
return False
if tH != h:
if verbose:
print("Error: Tree height incorrect: Should be {h} but is {tH}")
print("should be:")
print(h)
print("is:")
print(tH)
return False
if i == c:
h+=1
c+=(2**h)
del(tree)
if verbose:
print("Tree test complete.")
# Tree works
yield True
解决方案
推荐阅读
- c++ - 具有 std::enable_if 和具体类型的模板类特化
- python - 是否有任何其他方法可以检查类中的列表是否包含元素
- javascript - 传单geojson点层着色
- python - 为什么'in'运算符失败
- react-native - React Native ScrollView scrollTo 弹簧动画
- java - Spring Boot Kafka 批量转发
- python-3.x - 使用 python 调用 AWS lambda 时出错。错误:位置参数,但给出了 2 个
- dns - 通过 CoreDNS 将 DNS 转发到 Cloudflare 的 DNS-over-TLS
- ansible - 带有项目名称的自定义消息失败
- html - about:blank#blocked 在浏览器中下载文件时