当前位置:首页数据结构 > 正文

c++二叉树的建立与遍历

作者:野牛程序员:2023-07-03 15:43:37数据结构阅读 2664

在C++中,可以使用结构体或类来表示二叉树节点,然后通过递归的方式来建立和遍历二叉树。下面是一个使用结构体表示二叉树节点的示例:

#include <iostream>

struct TreeNode {
    int data;
    TreeNode* left;
    TreeNode* right;

    TreeNode(int val) : data(val), left(nullptr), right(nullptr) {}
};

// 递归方式建立二叉树
TreeNode* buildTree() {
    int val;
    std::cin >> val;

    if (val == -1) {  // 输入-1表示空节点
        return nullptr;
    }

    TreeNode* root = new TreeNode(val);
    std::cout << "Enter left child of " << val << ": ";
    root->left = buildTree();
    std::cout << "Enter right child of " << val << ": ";
    root->right = buildTree();

    return root;
}

// 前序遍历
void preorderTraversal(TreeNode* root) {
    if (root == nullptr) {
        return;
    }

    std::cout << root->data << " ";
    preorderTraversal(root->left);
    preorderTraversal(root->right);
}

// 中序遍历
void inorderTraversal(TreeNode* root) {
    if (root == nullptr) {
        return;
    }

    inorderTraversal(root->left);
    std::cout << root->data << " ";
    inorderTraversal(root->right);
}

// 后序遍历
void postorderTraversal(TreeNode* root) {
    if (root == nullptr) {
        return;
    }

    postorderTraversal(root->left);
    postorderTraversal(root->right);
    std::cout << root->data << " ";
}

int main() {
    std::cout << "Enter root value (-1 for empty node): ";
    TreeNode* root = buildTree();

    std::cout << "Preorder traversal: ";
    preorderTraversal(root);
    std::cout << std::endl;

    std::cout << "Inorder traversal: ";
    inorderTraversal(root);
    std::cout << std::endl;

    std::cout << "Postorder traversal: ";
    postorderTraversal(root);
    std::cout << std::endl;

    return 0;
}

在这个示例中,TreeNode 结构体表示二叉树的节点,其中包含一个整数 data 作为节点的值,以及左子节点和右子节点的指针。buildTree 函数使用递归的方式建立二叉树,用户可以输入节点的值,如果输入值为 -1 表示该节点为空。preorderTraversalinorderTraversalpostorderTraversal 函数分别进行前序、中序和后序遍历,并输出遍历结果。

野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击