C++ BinaryTree

36 阅读1分钟

在 C++ 中实现树形结构可以通过自定义节点类来表示树的节点,然后使用适当的数据结构来组织这些节点之间的关系。常见的方法包括使用指针或智能指针来表示节点之间的连接关系,以及使用递归或迭代的方式来遍历和操作树。

以下是一个简单的示例,演示了如何使用指针和递归来实现一个简单的二叉树:

#include <iostream>
#include <memory> // 包含智能指针相关的头文件

// 定义树的节点类
template<typename T>
class TreeNode {
public:
    T data;
    std::shared_ptr<TreeNode<T>> left;
    std::shared_ptr<TreeNode<T>> right;

    TreeNode(T value) : data(value), left(nullptr), right(nullptr) {}
};

// 定义二叉树类
template<typename T>
class BinaryTree {
private:
    std::shared_ptr<TreeNode<T>> root;

public:
    BinaryTree() : root(nullptr) {}

    // 插入节点
    void insert(T value) {
        root = insertRecursive(root, value);
    }

    // 递归插入节点
    std::shared_ptr<TreeNode<T>> insertRecursive(std::shared_ptr<TreeNode<T>> node, T value) {
        if (node == nullptr) {
            return std::make_shared<TreeNode<T>>(value);
        }

        if (value < node->data) {
            node->left = insertRecursive(node->left, value);
        } else if (value > node->data) {
            node->right = insertRecursive(node->right, value);
        }

        return node;
    }

    // 中序遍历
    void inorderTraversal(std::shared_ptr<TreeNode<T>> node) {
        if (node != nullptr) {
            inorderTraversal(node->left);
            std::cout << node->data << " ";
            inorderTraversal(node->right);
        }
    }

    // 公共接口,用于遍历二叉树
    void traverse() {
        inorderTraversal(root);
        std::cout << std::endl;
    }
};

int main() {
    BinaryTree<int> binaryTree;

    // 插入节点
    binaryTree.insert(5);
    binaryTree.insert(3);
    binaryTree.insert(7);
    binaryTree.insert(2);
    binaryTree.insert(4);
    binaryTree.insert(6);
    binaryTree.insert(8);

    // 遍历二叉树
    binaryTree.traverse();

    return 0;
}

在这个示例中,我们首先定义了一个 TreeNode 类表示树的节点,其中包含数据、左子节点和右子节点。然后,定义了一个 BinaryTree 类表示二叉树,提供了插入节点和遍历二叉树的功能。在插入节点时,采用递归的方式实现。最后,在 main 函数中创建了一个二叉树对象,并插入了一些节点,然后遍历了二叉树。