c++11 - 60:6:错误:没有匹配的成员函数调用“push”s.push(head);
问题描述
stack::push()
编译器说我在下面的代码中没有匹配的函数或任何堆栈函数。
此代码用于树的迭代前序遍历。
这是代码(或 PasteBin):
#include <iostream>
#include <stack>
struct Node {
int data;
Node *parent, *left, *right;
} *root = nullptr;
Node *createNode(int num) {
Node *new_node = new Node;
new_node -> data = num;
new_node -> parent = new_node -> left = new_node -> right = nullptr;
return new_node;
}
void createTree(int num) {
Node *new_node = createNode(num);
if(!root) {
root = new_node;
return;
}
Node *head = root, *parent_node = root;
while(head) {
if(num < head -> data) {
if(head -> left == nullptr) {
head -> left = new_node;
new_node -> parent = parent_node;
}
parent_node = head;
head = head -> left;
}
else {
if(head -> right == nullptr) {
head -> right = new_node;
new_node -> parent = parent_node;
}
parent_node = head;
head = head -> right;
}
}
}
void preorderTraversal(Node *head) {
std::stack<Node> s;
while(1) {
while(head) {
s.push(head);
std::cout << head -> data << " ";
head = head -> left;
}
if(!s.empty())
break;
head = s.top();
head = head -> right;
s.pop();
}
}
int main() {
int num;
for(int i = 0; i < 7; i++) {
std::cin >> num;
createTree(num);
}
preorderTraversal(root);
std::cout << std::endl;
return 0;
}
解决方案
它应该std::stack<Node*> s
代替,std::stack<Node> s
因为堆栈应该包含指向 Node 或Node*
.
对不起这是我的错!
推荐阅读
- javascript - ngb-Datepicker中如何通过ngModel更新输入框日期?
- java - Jackson - Json 字符串到 Java 类列表
- r - 直方图未对齐/对应于 ggplot/R 中的 x 轴
- python - 检查存储在内存位置的数据大小
- java - 从基类和实例成员顺序初始化问题中调用的构造函数、子类方法
- c# - 基于日期和大小的 Log4Net 滚动
- tensorflow - 在 tf.Estimator 方法上禁用 TensorBoard 日志记录
- nfc - Teensy 3.5 上的 NFC PN532
- django - Django ckeditor - 将宽度设置为 100%
- reactjs - 在本机反应中增加 AsyncStorage 大小限制