我需要一个函数来返回从表达式构建的树,例如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
代替吗?如果是这样,你能举例说明怎么做吗?
答案 0 :(得分:0)
通过复制,我猜你的意思是:
Node* root = Null;
root = nodeStack.pop();
我真的完全遵循你的算法,你的意思是复制如上。它应该工作。当然。可能是算法实现有问题。