c++实现满二叉树

59 阅读1分钟

下面是一个C++中满二叉树的简单实现示例:

#include <iostream>
#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 FullBinaryTree {
private:
    TreeNode<T>* root;

    // 创建满二叉树
    TreeNode<T>* createFullBinaryTree(int depth, int currDepth) {
        if (currDepth > depth) {
            return nullptr;
        }

        TreeNode<T>* node = new TreeNode<T>(currDepth);
        node->left = createFullBinaryTree(depth, currDepth + 1);
        node->right = createFullBinaryTree(depth, currDepth + 1);
        return node;
    }

public:
    FullBinaryTree(int depth) {
        root = createFullBinaryTree(depth, 1);
    }

    ~FullBinaryTree() {
        clear(root);
    }

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

    void display() {
        displayHelper(root, 0);
    }

    void displayHelper(TreeNode<T>* node, int level) {
        if (!node) {
            return;
        }
        displayHelper(node->right, level + 1);
        for (int i = 0; i < level; ++i) {
            std::cout << "   ";
        }
        std::cout << node->data << std::endl;
        displayHelper(node->left, level + 1);
    }
};

int main() {
    FullBinaryTree<int> fullTree(3);
    fullTree.display();

    return 0;
}

这个程序创建了一个深度为3的满二叉树,并打印了树的结构。