我需要一个节点指向多个孩子(我不知道在编译时我有多少孩子)。
暂时我只需要父节点指向至少一个孩子
但它指的是' 0',我错过了什么?
这是我的代码
#include <bits/stdc++.h>
using namespace std;
string tokens[10];
typedef struct node
{
char* value;
node* children[10]={NULL};
}node;
void connect(node* father,node* child)
{
// child = (node*) malloc(sizeof(node*));
if(father->children[0]!=NULL)
father->children[0]=child;
cout<<father->children[0]<<endl;
}
int main()
{
node* father_ = (node*) malloc(sizeof(node*));
node* child_ = (node*) malloc(sizeof(node*));
cout<<"before\n";
connect(father_,child_);
cout<<"after\n";
father_->children[0]->value="a";
cout<<child_->value;
}
答案 0 :(得分:2)
对指针的痴迷是什么?这是一个更多的c ++版本。
#include <string>
#include <vector>
#include <iostream>
#include <memory>
struct node
{
std::string value;
std::vector<node*> children;
};
void connect(node* father,node* child)
{
father->children.push_back(child);
}
int main()
{
auto father = std::make_unique<node>();
auto child = std::make_unique<node>();
connect( father.get(), child.get());
father->children[0]->value="a";
std::cout << child->value;
}
<强> Live on Coliru 强>
注意:
using naespace std
malloc
和free
答案 1 :(得分:1)
if(father->children[0]!=NULL)
father->children[0]=child;
如果父亲已经拥有非空的第一个孩子,则只会实例化父子关系。将!=
更改为==
(甚至删除!=NULL
部分,但随后取消条件。)