Пользовательская обработка дерева

Мне нужно построить дерево с произвольным числом «сыновей» в каждом узле (динамическая таблица с указателями на «сыновья» узла):

class node{
public
string data;
int number_of_sons;
struct node *father, **sons; // **sons is table of pointers to the "sons" of the node;

node(string s, int n) : data(s), number_of_sons(n){
}//constructor

};

и список класса:

class tree{
public:
node *root;
tree() : root(NULL){
}
};

Я создаю дерево и узлы дерева следующим образом:

tree t1 = new tree();
node n1 = new node("example1", 1);
node n2 = new node("example2", 2);
node n3 = new node("example3", 1);
node n4 = new node("example4", 3);

И я пытаюсь вставить их «вручную» в дерево, и это не работает:

n1->father = NULL;
t1->root = n1;

//adding the second object to the tree:
n2->father = root;
t1->root->sons[0] = n2;

Добавление «n1» в пустое дерево работает, но вторые операции некорректны. Может кто-нибудь дать мне совет, как обращаться с таким деревом? Как добавить новый узел в корень?

0

Решение

Вы должны выделить место для сыновей. Вы можете использовать вектор для сыновей или просто сохранить в массив, как:
в конструкторе:

sons = new node[SIZE];
for(int i=0;i<SIZE;i++)
sons[i]= new node();

тогда просто код:

n1->father = NULL;
t1->root = n1;

//adding the second object to the tree:
n2->father = root;
t1->root->sons[0] = n2;
0

Другие решения

Я думаю n2 -> father = root неправильно. корень является членом данных tree, вы можете отослать это использовать t1 -> root, И если вы хотите определить дерево, вам просто нужно определить класс Node следующим образом:

class Node
{
string data_;
std::vector<Node> children_;

public:
Node(string);
}

//

Node* root = new Node("root");
Node node = Node("child");
root -> children.insert(node);
0

По вопросам рекламы [email protected]