C ++中树的内存分配类型

时间:2013-03-11 15:46:49

标签: c++ pointers tree stack dynamic-memory-allocation

我需要一个函数来返回从表达式构建的树,例如AB * B +。每个节点都是struct

类型
struct Node {
std::string name;
Node* left;
Node* right;
}

我现在需要解析表达式AB * B +。我有std::vector<Node*>的筹码。

1)为A创建节点,将其推入堆栈

2)为B创建节点,将其推入堆栈

3)为*创建节点,弹出B,将其分配到右侧,弹出A,将其分配给左侧。将*打开到堆栈

这一直持续到表达式完成。

现在,如果我有权访问树的根,我应该能够访问每个节点。但是,由于我将所有这些分配到函数的堆栈上,我猜测当我返回根节点时,虽然节点可能被复制到RHS,但它指向的子节点是无效的。

我应该在创建时将所有节点存储在不同的std::vector<Node> nodes。使用堆栈创建父子关系,然后按值返回nodes?这有用吗?

或者我应该使用std::shared_ptr代替吗?如果是这样,你能举例说明怎么做吗?

1 个答案:

答案 0 :(得分:0)

通过复制,我猜你的意思是:

    Node* root = Null;
    root = nodeStack.pop();

我真的完全遵循你的算法,你的意思是复制如上。它应该工作。当然。可能是算法实现有问题。