如何使用迭代将其推入std :: stack时如何更新指针?

问题描述 投票:0回答:1

这里是情况:

给出一个指向二进制搜索树的根的指针(整数)root和一个整数data,对所有包含rotate的节点的祖先节点使用迭代方法。为简单起见,假设data存在并且始终在叶子节点上发生。

data函数通过引用按如下方式传递指针:

rotate

迭代版本需要使用堆栈。 struct Node { Node *left; int data; Node *right; }; void rotate(Node* &root); // performs some rotation on the root and reflects the change. void search(Node* &root, int data) { stack<Node*> s; while(root->data!=data) { s.push(root); if(data<root->data) root=root->left; else root=root->right; } while(!s.empty()) { rotate(s.top()); // does not reflect changes to root s.pop(); } } 函数按值推动指针。结果,当弹出祖先指针时,我将在堆栈中反映更改。

这种情况下最好的解决方法是什么?

c++ stack iteration binary-tree pass-by-reference
1个回答
0
投票
例如具有

std::stack::push()

您想潜在地修改搜索中

r的值,但是使用类似的堆栈来松开对r的引用,则需要保存指向Node指针的地址。一种方法是:

Node * r = ...; search(r);
© www.soinside.com 2019 - 2024. All rights reserved.