欢迎访问宙启技术站
智能推送

如何使用Python函数实现二叉搜索树中序遍历?

发布时间:2023-06-22 12:05:08

二叉搜索树是一种常见的数据结构,它具有以下特点:

1. 每个节点都有两个子节点,左子节点和右子节点;

2. 左子节点的值小于父节点的值,右子节点的值大于父节点的值;

3. 所有节点都可以通过中序遍历以升序的方式遍历。

在Python中,我们可以使用函数来实现二叉搜索树的中序遍历。以下是一个通过递归实现的代码示例:

class Node:
    def __init__(self, val = None):
        self.left = None
        self.right = None
        self.val = val

def inorderTraversal(root):
    """
    :type root: TreeNode
    :rtype: List[int]
    """

    result = []

    def inorder(node):
        if node:
            inorder(node.left)
            result.append(node.val)
            inorder(node.right)

    inorder(root)

    return result

在这个例子中,我们首先定义了一个Node类来表示树的节点。每个节点包含一个值val和左右子节点left和right。

接下来,我们定义了一个inorderTraversal函数来执行中序遍历。该函数采用递归方式实现。我们首先创建一个结果列表result,在inorder函数中,如果当前节点存在(即不为空),我们将递归遍历其左子树,将当前节点的值添加到结果列表中,然后递归遍历其右子树。

最后,在inorderTraversal函数的末尾,我们将结果列表返回。

我们可以如下使用该函数:

# 创建树的节点
root = Node(5)
root.left = Node(3)
root.right = Node(7)
root.left.left = Node(2)
root.left.right = Node(4)
root.right.left = Node(6)
root.right.right = Node(8)

# 执行中序遍历
print(inorderTraversal(root)) # [2, 3, 4, 5, 6, 7, 8]

在这个例子中,我们创建了一个二叉搜索树,然后调用inorderTraversal函数来执行中序遍历,得到输出结果[2, 3, 4, 5, 6, 7, 8]。

除了递归,我们也可以使用栈来实现中序遍历。以下是使用栈的代码示例:


def inorderTraversal(root):
    """
    :type root: TreeNode
    :rtype: List[int]
    """
    
    if not root:
        return []
    
    result = []
    stack = []
    
    while root or stack:
        while root:
            stack.append(root)
            root = root.left
        
        node = stack.pop()
        result.append(node.val)
        root = node.right
        
    return result

在这个例子中,我们创建了一个空栈stack,将树的根节点root以及其所有左子节点依次压入栈中。当栈不为空时,我们弹出栈顶元素并将其值存储到结果列表result中。然后,我们检查当前节点的右子节点是否为空,如果不为空,则将其加入栈中。我们重复这个过程,直到栈为空。最后,我们返回结果列表。

这就是如何使用Python函数来实现二叉搜索树中序遍历。无论是递归还是栈实现,都可以轻松地对树进行操作,输出按顺序排列的结果。