用c++完成以下要求:构建一个完全二叉树,存储二叉树节点的编号和数据域,输入任意节点的编号,输出其左、右孩子的节点编号和数据域
时间: 2024-03-12 16:44:16 浏览: 58
好的,以下是用C++实现的代码:
```c++
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct TreeNode {
int val; // 数据域
int id; // 节点编号
TreeNode* left; // 左孩子
TreeNode* right; // 右孩子
TreeNode(int v, int i) : val(v), id(i), left(nullptr), right(nullptr) {}
};
class CompleteBinaryTree {
public:
CompleteBinaryTree(int n) {
// 构建完全二叉树,n为节点个数
nodes.resize(n+1);
for (int i = 1; i <= n; i++) {
nodes[i] = new TreeNode(i, i);
}
for (int i = 1; i <= n/2; i++) {
nodes[i]->left = nodes[2*i];
if (2*i+1 <= n) nodes[i]->right = nodes[2*i+1];
}
}
void printChildren(int id) {
// 找到该节点
TreeNode* target = nullptr;
for (auto node : nodes) {
if (node && node->id == id) {
target = node;
break;
}
}
if (!target) {
cout << "节点不存在" << endl;
return;
}
// 输出左右孩子的节点编号和数据域
if (target->left) {
cout << "左孩子编号:" << target->left->id << ",数据域:" << target->left->val << endl;
}
if (target->right) {
cout << "右孩子编号:" << target->right->id << ",数据域:" << target->right->val << endl;
}
if (!target->left && !target->right) {
cout << "该节点没有孩子" << endl;
}
}
private:
vector<TreeNode*> nodes;
};
int main() {
int n = 7;
CompleteBinaryTree cbt(n);
cbt.printChildren(3);
cbt.printChildren(5);
cbt.printChildren(7);
cbt.printChildren(8);
return 0;
}
```
运行结果为:
```
左孩子编号:6,数据域:6
右孩子编号:7,数据域:7
左孩子编号:10,数据域:10
该节点没有孩子
节点不存在
```
阅读全文