对于我的作业,我需要根据给定的字符串(输入,输入和输出)返回一个列表,该列表包含二进制树中具有正确顺序的节点。但是它返回'None'
,我不知道怎么了。感谢您的任何帮助。
class BinarySearchTree:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def create_new_bst(nums):
root = None
for num in nums:
root = insert(root, num)
return root
def insert (t, data):
if not t:
return BinarySearchTree(data)
elif t.data == data:
t.count += 1
elif data < t.data:
t.left = insert(t.left, data)
else:
t.right = insert(t.right, data)
return t
def traverse(t, order):
if order == 'in':
return inorder(t)
elif order == 'pre':
return preorder(t)
elif order == 'post':
return postorder(t)
def inorder(root):
lst = []
if root:
inorder(root.left)
lst.append(root.data)
inorder(root.right)
return lst
def postorder(root):
lst = []
if root:
postorder(root.left)
postorder(root.right)
lst.append(root.data)
return lst
def preorder(root):
lst = []
if root:
lst.append(root.data)
preorder(root.left)
preorder(root.right)
return lst
t = create_new_bst([55, 24, 8, 51, 25, 72, 78])
result = traverse(t, 'post')
print('Result =', result)
答案 0 :(得分:0)
因此,除了您最初在构造BST时遇到的问题外,遍历还没有使用lst
和left
子树返回的值来更新right
变量。以下代码应该起作用:
def inorder(root):
lst = []
if root:
lst = inorder(root.left)
lst.append(root.data)
lst.extend(inorder(root.right))
return lst
def postorder(root):
lst = []
if root:
lst = postorder(root.left)
lst.extend(postorder(root.right))
lst.append(root.data)
return lst
def preorder(root):
lst = []
if root:
lst.append(root.data)
lst.extend(preorder(root.left))
lst.extend(preorder(root.right))
return lst
extend
是一种列表方法,它将参数列表中的每个项目添加到调用者列表的末尾。