C++实现二叉树中序遍历算法

本文将介绍如何使用C++实现二叉树的中序遍历算法,并提供完整的代码示例。

1. 问题描述

给定一个以1为根的树,输出树的中序遍历。

2. 输入格式

第一行输入一个整数 n 表示树有 n 个点。 后面 n 行每行输入三个数,num,ls 和 rs,分别表示第 num 个点、它的左儿子和右儿子,-1 表示空节点。

3. 输出格式

输出树的中序遍历。

4. 样例输入

5
1 2 3
2 4 5
3 -1 -1
4 -1 -1
5 -1 -1

5. C++代码实现

#include <iostream>
#include <vector>

using namespace std;

// 定义树节点
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

// 中序遍历函数
void inorderTraversal(TreeNode *root, vector<int> &result) {
    if (root == NULL) {
        return;
    }
    inorderTraversal(root->left, result);
    result.push_back(root->val);
    inorderTraversal(root->right, result);
}

int main() {
    int n;
    cin >> n;
    vector<TreeNode *> nodes(n + 1, NULL);

    // 构建树
    for (int i = 1; i <= n; i++) {
        int num, ls, rs;
        cin >> num >> ls >> rs;
        TreeNode *node = new TreeNode(num);
        nodes[num] = node;

        if (ls != -1) {
            node->left = nodes[ls];
        }
        if (rs != -1) {
            node->right = nodes[rs];
        }
    }

    // 中序遍历
    vector<int> result;
    inorderTraversal(nodes[1], result);

    // 输出结果
    for (int i = 0; i < result.size(); i++) {
        cout << result[i];
        if (i < result.size() - 1) {
            cout << ' ';
        }
    }
    cout << endl;

    return 0;
}

6. 解题思路

中序遍历的顺序是:左子树 -> 根节点 -> 右子树。

  • 递归遍历左子树。
  • 访问根节点,将节点值加入结果数组。
  • 递归遍历右子树。

7. 总结

本文介绍了使用 C++ 实现二叉树中序遍历算法,并提供了详细的代码示例和解题思路,希望对你有所帮助。

C++实现二叉树中序遍历算法(附代码示例)

原文地址: https://www.cveoy.top/t/topic/cbGe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录