二叉树的三种遍历【树的遍历】(C++实现)Binary Tree Traversal

图论入门【数据结构基础】:什么是树?如何表示树?

之前我们有分别讲解二叉树的三种遍历的相关代码实现:
⭐算法OJ⭐二叉树的前序遍历【树的遍历】(C++实现)Binary Tree Preorder Traversal
⭐算法OJ⭐二叉树的中序遍历【树的遍历】(C++实现)Binary Tree Inorder Traversal
⭐算法OJ⭐二叉树的后序遍历【树的遍历】(C++实现)Binary Tree Postorder Traversal

二叉树的三种主要遍历方式是:前序遍历(Preorder Traversal)、中序遍历(Inorder Traversal)和后序遍历(Postorder Traversal)。它们的区别在于访问根节点、左子树和右子树的顺序不同。

遍历方式

  • 前序遍历的顺序是:根节点 → \rightarrow 左子树 → \rightarrow 右子树
  • 中序遍历的顺序是:左子树 → \rightarrow 根节点 → \rightarrow 右子树
  • 后序遍历的顺序是:左子树 → \rightarrow 右子树 → \rightarrow 根节点

1. 前序遍历(Preorder Traversal)

访问顺序:根节点 -> 左子树 -> 右子树

特点:

  • 先访问根节点,再递归遍历左子树,最后递归遍历右子树。
  • 适合用于复制一棵树或生成前缀表达式。

示例:

对于以下二叉树:

    1
   / \
  2   3
 / \
4   5

前序遍历结果为:1 2 4 5 3

2. 中序遍历(Inorder Traversal)

访问顺序:左子树 -> 根节点 -> 右子树

特点:

  • 先递归遍历左子树,再访问根节点,最后递归遍历右子树。
  • 对于二叉搜索树(BST),中序遍历的结果是一个升序序列。
  • 适合用于获取有序数据或生成中缀表达式。

示例:

对于以下二叉树:

    1
   / \
  2   3
 / \
4   5

中序遍历结果为:4 2 5 1 3

3. 后序遍历(Postorder Traversal)

访问顺序:左子树 -> 右子树 -> 根节点

特点:

  • 先递归遍历左子树,再递归遍历右子树,最后访问根节点。
  • 适合用于删除一棵树或生成后缀表达式。

示例:

对于以下二叉树:

    1
   / \
  2   3
 / \
4   5

后序遍历结果为:4 5 2 3 1

对比总结

遍历方式 访问顺序 特点
前序遍历 根 -> 左 -> 右 适合复制树、生成前缀表达式
中序遍历 左 -> 根 -> 右 对二叉搜索树(BST)会生成升序序列,适合获取有序数据或生成中缀表达式
后序遍历 左 -> 右 -> 根 适合删除树、生成后缀表达式

代码实现对比

以下是三种遍历方式的C++实现:

1. 前序遍历

void preorder(TreeNode* root) {
    if (root == NULL) return;
    cout << root->val << " "; // 访问根节点
    preorder(root->left);     // 递归左子树
    preorder(root->right);    // 递归右子树
}

2. 中序遍历

void inorder(TreeNode* root) {
    if (root == NULL) return;
    inorder(root->left);      // 递归左子树
    cout << root->val << " "; // 访问根节点
    inorder(root->right);     // 递归右子树
}

3. 后序遍历

void postorder(TreeNode* root) {
    if (root == NULL) return;
    postorder(root->left);    // 递归左子树
    postorder(root->right);   // 递归右子树
    cout << root->val << " "; // 访问根节点

示例二叉树

      1
     / \
    2   3
   / \
  4   5
  • 前序遍历:1 2 4 5 3
  • 中序遍历:4 2 5 1 3
  • 后序遍历:4 5 2 3 1

题目形式

Given the root of a binary tree, return the inorder/preorder/postorder traversal of its nodes’ values.

Example 1:

Input: root = [1,null,2,3]

二叉树的三种遍历【树的遍历】(C++实现)Binary Tree Traversal_第1张图片

中序遍历 Output: [1,3,2]
前序遍历 Output: [1,2,3]
后序遍历 Output: [3,2,1]

Example 2:

Input: root = [1,2,3,4,5,null,8,null,null,6,7,9]

二叉树的三种遍历【树的遍历】(C++实现)Binary Tree Traversal_第2张图片

中序遍历 Output: [4,2,6,5,7,1,3,9,8]
前序遍历 Output: [1,2,4,5,6,7,3,8,9]
后序遍历 Output: [4,6,7,5,2,9,8,3,1]

Example 3:

Input: root = []
Output: []

Example 4:

Input: root = [1]
Output: [1]

你可能感兴趣的:(理论基础,c++,树的遍历,二叉树)