📅  最后修改于: 2023-12-03 15:10:20.472000             🧑  作者: Mango
树是一种数据结构,其中每个节点都有零个或多个子节点。树的节点连接起来的结构类似于树的分支结构,因此而得名。树的顶部节点称为根节点,没有子节点的节点称为叶子节点。
树的遍历是指按照某种顺序访问树中的所有节点。树的遍历可以分为三种方式:
以下代码演示了如何在 Python 中实现树的遍历:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def preorderTraversal(root: TreeNode) -> List[int]:
if root is None:
return []
result = []
stack = [root]
while stack:
node = stack.pop()
if node is not None:
result.append(node.val)
stack.append(node.right)
stack.append(node.left)
return result
def inorderTraversal(root: TreeNode) -> List[int]:
if root is None:
return []
result = []
stack = []
node = root
while stack or node is not None:
if node is not None:
stack.append(node)
node = node.left
else:
node = stack.pop()
result.append(node.val)
node = node.right
return result
def postorderTraversal(root: TreeNode) -> List[int]:
if root is None:
return []
result = []
stack = [root]
while stack:
node = stack.pop()
if node is not None:
result.append(node.val)
stack.append(node.left)
stack.append(node.right)
return result[::-1]
前序遍历是指先访问根节点,然后遍历左子树,最后遍历右子树的遍历方式。
以下是前序遍历的流程图:
以下是前序遍历的例子:
# 示例:
# 1
# / \
# 2 3
# / \
# 4 5
root = TreeNode(1, TreeNode(2), TreeNode(3, TreeNode(4), TreeNode(5)))
assert preorderTraversal(root) == [1, 2, 3, 4, 5]
中序遍历是指先遍历左子树,再访问根节点,最后遍历右子树的遍历方式。
以下是中序遍历的流程图:
以下是中序遍历的例子:
# 示例:
# 1
# / \
# 2 3
# / \
# 4 5
root = TreeNode(1, TreeNode(2), TreeNode(3, TreeNode(4), TreeNode(5)))
assert inorderTraversal(root) == [2, 1, 4, 3, 5]
后序遍历是指先遍历左子树,再遍历右子树,最后访问根节点的遍历方式。
以下是后序遍历的流程图:
以下是后序遍历的例子:
# 示例:
# 1
# / \
# 2 3
# / \
# 4 5
root = TreeNode(1, TreeNode(2), TreeNode(3, TreeNode(4), TreeNode(5)))
assert postorderTraversal(root) == [2, 4, 5, 3, 1]
树的遍历是树相关问题中,最常见的一种问题。熟练掌握树的遍历算法,对于解决树相关问题非常重要。