c++实现完全二叉树

119 阅读1分钟

以下是一个C++中完全二叉树的简单实现示例:

#include <iostream>
#include <queue>
#include <cmath>

// 二叉树节点
template<typename T>
struct TreeNode {
    T data;
    TreeNode<T>* left;
    TreeNode<T>* right;

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

// 完全二叉树
template<typename T>
class CompleteBinaryTree {
private:
    TreeNode<T>* root;

    // 创建完全二叉树
    TreeNode<T>* createCompleteBinaryTree(int index, int n, const std::vector<T>& data) {
        if (index >= n) {
            return nullptr;
        }

        TreeNode<T>* node = new TreeNode<T>(data[index]);
        node->left = createCompleteBinaryTree(2 * index + 1, n, data);
        node->right = createCompleteBinaryTree(2 * index + 2, n, data);
        return node;
    }

public:
    CompleteBinaryTree(const std::vector<T>& data) {
        root = createCompleteBinaryTree(0, data.size(), data);
    }

    ~CompleteBinaryTree() {
        clear(root);
    }

    void clear(TreeNode<T>* node) {
        if (!node) {
            return;
        }
        clear(node->left);
        clear(node->right);
        delete node;
    }

    void display() {
        std::queue<TreeNode<T>*> q;
        q.push(root);
        while (!q.empty()) {
            int size = q.size();
            for (int i = 0; i < size; ++i) {
                TreeNode<T>* curr = q.front();
                q.pop();
                if (curr) {
                    std::cout << curr->data << " ";
                    q.push(curr->left);
                    q.push(curr->right);
                }
            }
            std::cout << std::endl;
        }
    }
};

int main() {
    std::vector<int> data = {1, 2, 3, 4, 5, 6, 7};
    CompleteBinaryTree<int> completeTree(data);
    completeTree.display();

    return 0;
}

这个程序创建了一个完全二叉树,并展示了它的结构。