按顺序遍历 BST 并将节点存储在数组中,但输出未排序?

Traversing a BST in an in-order fashion and storing the nodes in an array, but the output is not sorted?

我正在遍历 in-order manner 中的 Binary Tree 以确定它是否是 Binary Search Tree。这是我的代码:

class T:
    def __init__(self, value, left=None, right=None):
        self.value = value
        self.left = left
        self.right = right

def is_bst(node):  
    if not node:
        return 

    output = []
    
    is_bst(node.left)
    output.append(node.value) 
    is_bst(node.right)
    print(output)

对于上面的例子,output = [1,3,2,9,7,5]

但这显然是不正确的! - 我通常会调试,但我不熟悉 运行 trees/binary 树作为输入。知道我的代码哪里出错了吗???


更新代码:

class T:
    def __init__(self, value, left=None, right=None):
        self.value = value
        self.left = left
        self.right = right

        
def inOrderTraversal(node,output): 
        if not node: 
            return None
        
        is_bst(node.left)
        output.append(node.value) 
        is_bst(node.right)
        return 
    
def is_bst(node):  
    
    output = []
    
    inOrderTraversal(node,output)
    
    print(output)

同样的例子,output = [1,3,2,9,7,5]还是错的

您在例程中创建 output,因此它始终是空的。然后添加当前节点的值,但在例程结束时打印它。结果是 postorder,而不是 inorder - 每个节点都在 after 它的两个子树中打印。

除了代码结构之外,您的函数名称错误 - 您实际上不希望它回答树是否为 BST,您只希望它return 内容:

def dump_tree_inorder(node, output):  
    if not node:
        return 
    
    dump_tree_inorder(node.left, output)
    output.append(node.value) 
    dump_tree_inorder(node.right, output)