返回
二叉树之旅:前序、中序、后序
前端
2023-10-07 03:13:02
二叉树是计算机科学中一种重要的数据结构,它可以用来表示许多不同的数据结构,例如堆、图和集合。遍历是访问二叉树中每个节点的过程,有三种主要的遍历方式:前序遍历、中序遍历和后序遍历。这三种遍历方式都可以使用递归或迭代来实现。
前序遍历
前序遍历的顺序是:根节点、左子树、右子树。在每个节点被访问之前,它会先访问它的左子树,然后访问它的右子树。这种遍历方式经常被用于打印二叉树的结构,因为它是深度优先的遍历方式。
中序遍历
中序遍历的顺序是:左子树、根节点、右子树。在每个节点被访问之前,它会先访问它的左子树,然后访问它的根节点,最后访问它的右子树。这种遍历方式经常被用于对二叉树中的元素进行排序,因为它是中序的遍历方式。
后序遍历
后序遍历的顺序是:左子树、右子树、根节点。在每个节点被访问之前,它会先访问它的左子树,然后访问它的右子树,最后访问它的根节点。这种遍历方式经常被用于释放二叉树中的内存,因为它是后序的遍历方式。
递归实现
这三种遍历方式都可以使用递归来实现。以下是用递归实现的前序遍历、中序遍历和后序遍历的代码:
def preorder_traversal(root):
if root is None:
return
print(root.data)
preorder_traversal(root.left)
preorder_traversal(root.right)
def inorder_traversal(root):
if root is None:
return
inorder_traversal(root.left)
print(root.data)
inorder_traversal(root.right)
def postorder_traversal(root):
if root is None:
return
postorder_traversal(root.left)
postorder_traversal(root.right)
print(root.data)
迭代实现
这三种遍历方式也可以使用迭代来实现。以下是用迭代实现的前序遍历、中序遍历和后序遍历的代码:
def preorder_traversal(root):
stack = []
while root or stack:
while root:
stack.append(root)
print(root.data)
root = root.left
root = stack.pop()
root = root.right
def inorder_traversal(root):
stack = []
while root or stack:
while root:
stack.append(root)
root = root.left
root = stack.pop()
print(root.data)
root = root.right
def postorder_traversal(root):
stack = []
last_visited = None
while root or stack:
while root:
stack.append(root)
root = root.left
root = stack[-1]
if not root.right or root.right == last_visited:
root = stack.pop()
print(root.data)
last_visited = root
root = None
else:
root = root.right
二叉树的遍历是计算机科学中的一项基本技能,它可以帮助你理解和操纵二叉树。这三种遍历方式各有其用途,你可以根据你的具体需求选择合适的遍历方式。