如何返回二叉搜索树的“在”,“在前”和“在后”顺序的列表?

时间:2019-05-24 06:19:05

标签: python-3.x binary-search-tree

对于我的作业,我需要根据给定的字符串(输入,输入和输出)返回一个列表,该列表包含二进制树中具有正确顺序的节点。但是它返回'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)

1 个答案:

答案 0 :(得分:0)

因此,除了您最初在构造BST时遇到的问题外,遍历还没有使用lstleft子树返回的值来更新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是一种列表方法,它将参数列表中的每个项目添加到调用者列表的末尾。