【发布时间】:2018-09-02 06:27:51
【问题描述】:
在hackerrank中学习BST时,我遇到了以下问题。
我的节点和二叉搜索树的类定义如下:
class Node:
def __init__(self,info):
self.info = info
self.left = None
self.right = None
class BinarySearchTree:
def __init__(self):
self.root = None
def insert(self,val):
currentNode = self.root
if currentNode is None:
self.root = Node(val)
elif currentNode.info > val:
currentNode.left = insert(currentNode.left,val)
elif currentNode.info < val:
currentNode.right = insert(currentNode.right,val)
return currentNode
但是,在对某些整数数组 arr 使用 tree.insert(arr[i] 的 for 循环之后,对 tree = BinarySearchTree() 执行遍历不会返回任何输出。这个逻辑对我来说似乎是正确的,我怀疑这是由于 Node 和 BST 之间的类型不同,但我不确定如何解决这个问题。
编辑:下面是来自hackerrank的完整代码。我唯一能编辑的是插入功能。
class Node:
def __init__(self, info):
self.info = info
self.left = None
self.right = None
self.level = None
def __str__(self):
return str(self.info)
def preOrder(root):
if root == None:
return
print (root.info, end=" ")
preOrder(root.left)
preOrder(root.right)
class BinarySearchTree:
def __init__(self):
self.root = None
def insert(self,val):
currentNode = self.root
if currentNode is None:
self.root = Node(val)
elif currentNode.info > val:
currentNode.left = insert(currentNode.left,val)
elif currentNode.info < val:
currentNode.right = insert(currentNode.right,val)
return currentNode
tree = BinarySearchTree()
t = int(input())
arr = list(map(int, input().split()))
for i in range(t):
tree.insert(arr[i])
preOrder(tree.root)
给定的测试用例是
6
4 2 3 1 7 6
应该返回4 2 3 1 7 6,但没有返回任何输出。
编辑:根据第一个答案进行更改!现在,我有以下一周的错误:
Traceback (most recent call last):
File “solution.py”, line 40, in <module>
tree.insert(arr[i])
File “solution.py”, line 30, in insert
currentNode.left = insert(currentNode.left,val)
NameError: name ‘insert’ is not defined
【问题讨论】:
-
您能否也发布您的测试用例和您的预期结果?
-
@jshamble 好吧!
标签: python python-3.x insert binary-tree binary-search-tree