我正在尝试在树中创建一个最小堆,但是我在这里是新手,我已经有两周时间用指针和地址继续前进了,
所以我制作了这样的结构:
struct node{
int data;
node* left;
node* right;
};
然后是这样的插入函数:
void Insert(int dataii){
node* new_node = new node();
new_node->data = dataii;
new_node->left = new_node->right = NULL;
}
好吧,现在是我的问题开始时,如何连接节点使它们成为一棵树。
我正在考虑使用数组来存储数组[0]中的new_nodes数,然后存储数组[1],依此类推将new_node与数据和地址相关联。
但我似乎找不到一个有效的代码来完成这项工作。我的目标是制作一个带有最小堆的二叉树,但我还没能做到这一点。
一旦每个父母将有两个孩子的最大值,并且总是在插入时他们从左到右。
如果有人能给我一个好主意如何前进,谢谢。 蒂亚戈
答案 0 :(得分:0)
这应该让你去。
#include<iostream>
using namespace std;
class Node{
public:
int data;
Node *left, *right;
Node(int data);
~Node();
int count();
void insert(Node *n);
void print(const int indent, const char* note);
};
Node::Node(int data) {
this->data = data;
this->left = this->right = NULL;
}
Node::~Node(){
if (this->left != NULL) delete this->left;
if (this->right != NULL) delete this->right;
}
int Node::count() {
int r = 1;
if (this->left != NULL) r += this->left->count();
if (this->right != NULL) r += this->right->count();
return r;
}
void Node::insert(Node* n){
if (this->left == NULL) this->left = n;
else if (this->right == NULL) this->right = n;
else if (this->left->count() > this->right->count()) this->right->insert(n);
else this->left->insert(n);
}
void Node::print(const int indent=0, const char *note="") {
for(int i = 0; i < indent; i++) cout << " ";
cout << this->data << " " << note << endl;
if (this->left != NULL) this->left->print(indent+1, "(l)");
if (this->right != NULL) this->right->print(indent+1, "(r)");
}
int main(int argc, char const *argv[]) {
Node *root = new Node(0);
for (int i = 1; i <= 10; i++) root->insert(new Node(i));
root->print();
delete root;
return 0;
}