📅  最后修改于: 2023-12-03 15:21:40.291000             🧑  作者: Mango
在二叉树中,混序遍历是一种遍历所有节点的方法。混序遍历顾名思义,是将左、中、右节点以任意顺序进行遍历的方式。这篇文章将介绍三种主要的混序遍历方式:前序、中序和后序遍历,并提供相应的代码实现。
前序遍历是一种混序遍历方式,它的遍历顺序为:根节点 -> 左节点 -> 右节点。可以使用递归或栈来实现。
实现前序遍历的递归代码如下:
def preorder_traversal(root):
if root:
print(root.val)
preorder_traversal(root.left)
preorder_traversal(root.right)
实现前序遍历的栈代码如下:
def preorder_traversal(root):
if not root:
return []
stack, res = [root], []
while stack:
node = stack.pop()
if node:
res.append(node.val)
stack.append(node.right)
stack.append(node.left)
return res
中序遍历是一种混序遍历方式,它的遍历顺序为:左节点 -> 根节点 -> 右节点。可以使用递归或栈来实现。
实现中序遍历的递归代码如下:
def inorder_traversal(root):
if root:
inorder_traversal(root.left)
print(root.val)
inorder_traversal(root.right)
实现中序遍历的栈代码如下:
def inorder_traversal(root):
if not root:
return []
stack, res = [], []
node = root
while stack or node:
while node:
stack.append(node)
node = node.left
node = stack.pop()
res.append(node.val)
node = node.right
return res
后序遍历是一种混序遍历方式,它的遍历顺序为:左节点 -> 右节点 -> 根节点。可以使用递归或栈来实现。
实现后序遍历的递归代码如下:
def postorder_traversal(root):
if root:
postorder_traversal(root.left)
postorder_traversal(root.right)
print(root.val)
实现后序遍历的栈代码如下:
def postorder_traversal(root):
if not root:
return []
stack, res = [root], []
while stack:
node = stack.pop()
if node:
res.append(node.val)
stack.append(node.left)
stack.append(node.right)
return res[::-1]
以上是三种混序遍历的实现方法。前序、中序和后序遍历的遍历方式都不同,尽管它们都是混序遍历方式,但它们的实现方法却都非常相似。在具体实现时,我们可以选择递归或栈,或者根据问题的要求来选择最适合的方法。