使用节点指针数组指向节点的子节点

时间:2016-04-17 11:14:25

标签: c++ pointers nodes

我需要一个节点指向多个孩子(我不知道在编译时我有多少孩子)。
暂时我只需要父节点指向至少一个孩子 但它指的是' 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;

}

2 个答案:

答案 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
  • 请勿使用mallocfree
  • 您不需要在c ++
  • 中输入typedef结构
  • 使用诸如字符串和向量之类的容器
  • 避免使用c样式数组
  • 不使用原始指针进行所有权

答案 1 :(得分:1)

if(father->children[0]!=NULL)
    father->children[0]=child;

如果父亲已经拥有非空的第一个孩子,则只会实例化父子关系。将!=更改为==(甚至删除!=NULL部分,但随后取消条件。)