数据结构与C++

数据结构与C++ 知识量:9 - 32 - 91

6.3 遍历二叉树><

遍历二叉树的方法- 6.3.1 -

遍历二叉树的方法有多种,其中常用的有先序遍历、中序遍历和后序遍历。

  • 先序遍历:先访问根节点,然后递归地先序遍历左子树,最后递归地先序遍历右子树。

  • 中序遍历:先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。

  • 后序遍历:先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。

先序遍历- 6.3.2 -

先序遍历二叉树的顺序是“根-左-右”。以下是使用C++语言实现先序遍历二叉树的示例代码:

#include <iostream>  
using namespace std;  
  
// 定义二叉树节点结构体  
struct TreeNode {  
    int val;  
    TreeNode* left;  
    TreeNode* right;  
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}  
};  
  
// 先序遍历二叉树函数  
void preorderTraversal(TreeNode* root) {  
    if (root == NULL) { // 如果节点为空,直接返回  
        return;  
    }  
    cout << root->val << " "; // 输出当前节点的值  
    preorderTraversal(root->left); // 递归遍历左子树  
    preorderTraversal(root->right); // 递归遍历右子树  
}  
  
int main() {  
    // 构建二叉树  
    TreeNode* root = new TreeNode(1);  
    root->left = new TreeNode(2);  
    root->right = new TreeNode(3);  
    root->left->left = new TreeNode(4);  
    root->left->right = new TreeNode(5);  
    root->right->left = new TreeNode(6);  
    root->right->right = new TreeNode(7);  
  
    // 先序遍历二叉树  
    cout << "先序遍历结果:";  
    preorderTraversal(root);  
    cout << endl;  
  
    return 0;  
}

在这个示例中,定义了一个 TreeNode 结构体表示二叉树的节点,包含数据元素 val 和左右子节点的指针 left、right。preorderTraversal 函数用于实现先序遍历二叉树,如果当前节点为空,直接返回;否则输出当前节点的值,递归遍历左子树和右子树。在 main 函数中,构建了一个二叉树,并调用 preorderTraversal 函数进行先序遍历,并输出结果。

中序遍历- 6.3.3 -

中序遍历二叉树的顺序是“左-根-右”。以下是使用C++语言实现中序遍历二叉树的示例代码:

#include <iostream>  
using namespace std;  
  
// 定义二叉树节点结构体  
struct TreeNode {  
    int val;  
    TreeNode* left;  
    TreeNode* right;  
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}  
};  
  
// 中序遍历二叉树函数  
void inorderTraversal(TreeNode* root) {  
    if (root == NULL) { // 如果节点为空,直接返回  
        return;  
    }  
    inorderTraversal(root->left); // 递归遍历左子树  
    cout << root->val << " "; // 输出当前节点的值  
    inorderTraversal(root->right); // 递归遍历右子树  
}  
  
int main() {  
    // 构建二叉树  
    TreeNode* root = new TreeNode(1);  
    root->left = new TreeNode(2);  
    root->right = new TreeNode(3);  
    root->left->left = new TreeNode(4);  
    root->left->right = new TreeNode(5);  
    root->right->left = new TreeNode(6);  
    root->right->right = new TreeNode(7);  
  
    // 中序遍历二叉树  
    cout << "中序遍历结果:";  
    inorderTraversal(root);  
    cout << endl;  
  
    return 0;  
}

在这个示例中,定义了一个 TreeNode 结构体表示二叉树的节点,包含数据元素 val 和左右子节点的指针 left、right。inorderTraversal 函数用于实现中序遍历二叉树,如果当前节点为空,直接返回;否则递归遍历左子树,输出当前节点的值,递归遍历右子树。在 main 函数中,构建了一个二叉树,并调用 inorderTraversal 函数进行中序遍历,并输出结果。

后序遍历- 6.3.4 -

后序遍历二叉树的顺序是“左-右-根”。以下是使用C++语言实现后序遍历二叉树的示例代码:

#include <iostream>  
using namespace std;  
  
// 定义二叉树节点结构体  
struct TreeNode {  
    int val;  
    TreeNode* left;  
    TreeNode* right;  
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}  
};  
  
// 中序遍历二叉树函数  
void inorderTraversal(TreeNode* root) {  
    if (root == NULL) { // 如果节点为空,直接返回  
        return;  
    }  
    inorderTraversal(root->left); // 递归遍历左子树  
    cout << root->val << " "; // 输出当前节点的值  
    inorderTraversal(root->right); // 递归遍历右子树  
}  
  
int main() {  
    // 构建二叉树  
    TreeNode* root = new TreeNode(1);  
    root->left = new TreeNode(2);  
    root->right = new TreeNode(3);  
    root->left->left = new TreeNode(4);  
    root->left->right = new TreeNode(5);  
    root->right->left = new TreeNode(6);  
    root->right->right = new TreeNode(7);  
  
    // 中序遍历二叉树  
    cout << "中序遍历结果:";  
    inorderTraversal(root);  
    cout << endl;  
  
    return 0;  
}

在这个示例中,定义了一个 TreeNode 结构体表示二叉树的节点,包含数据元素 val 和左右子节点的指针 left、right。postorderTraversal 函数用于实现后序遍历二叉树,如果当前节点为空,直接返回;否则递归遍历左子树和右子树,最后输出当前节点的值。在 main 函数中,构建了一个二叉树,并调用 postorderTraversal 函数进行后序遍历,并输出结果。