gpt4 book ai didi

c++ - 创建一棵 n 叉树

转载 作者:行者123 更新时间:2023-11-30 00:52:21 30 4
gpt4 key购买 nike

我正在尝试创建一个包含子 vector 的 n 叉树。

这就是我到目前为止所得到的。

在 node.h 文件中我有这个:

  #include <vector>
#include <string>

using namespace std;

class Node{

private:
Node *parent;
vector <Node*> children;

int data;

public:
Node();
Node(Node parent, vector<Node> children);
Node(Node parent, vector<Node> children, int data);

Node * GetParent();

void SetChildren(vector<Node> children);
vector<Node>* GetChildren();
void AddChildren(Node children);

void SetData(int data);
int GetData();

bool IsLeaf();
bool IsInternalNode();
bool IsRoot();

};

这是我的 node.cpp 文件。

   #include "node.h"

Node::Node(){
this->parent = NULL;
this->children = NULL;
this->data = 0;
}

Node::Node(Node parent, vector<Node> children){
this->parent = &parent;
this->children = &children;
}

Node::Node(Node parent, vector<Node> children, int data){
this->parent = &parent;
this->children = &children;
this->data = data;
}

Node* Node:: GetParent(){
return this->parent;
}

void Node::SetChildren(vector<Node> children){
this->children = &children;
}

vector<Node> * Node::GetChildren(){
return this->children;
}

void Node::AddChildren(Node children){
this->children.push_back(children);
}

void Node::SetData(int data){
this->data = data;
}

这显然行不通。我的主要问题是我不太确定如何为 children 处理 vector 。我是按照一些在线教程写的,但是正如你所看到的,我非常困惑。

最佳答案

代码中的主要(也可能是唯一)问题是您将 Node 类定义为通过指针 (Node*) 操作节点:

class Node{
private:
Node *parent;
vector <Node*> children;

但是您的方法是通过值 (Node) 来操纵节点。

例如,在构造函数中:

Node::Node(Node parent, vector<Node> children){
this->parent = &parent;

存储 parent 参数的地址将不起作用,它是一个临时对象,您需要将 Node* parent 传递给您的构造函数或创建一个新的 Node 对象。

    this->children = &children; 

这没有任何意义,因为 this->childrenNode* 的一个 vector ,而 children 参数是一个 vector 节点。同样,您需要将 Node* vector 传递给您的构造函数或创建新的节点对象。

您在 SetChildrenAddChildren 中遇到了同样的问题。

此外,由于您将节点作为指针进行操作,因此在内存管理方面要非常小心。 C++ 中没有垃圾收集器,您必须在适当的时间删除新建的所有内容。

关于c++ - 创建一棵 n 叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19320446/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com