以下是一个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;
}
这个程序创建了一个完全二叉树,并展示了它的结构。