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