首页 > 解决方案 > 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;
}

标签: c++11treestack

解决方案


它应该std::stack<Node*> s代替,std::stack<Node> s因为堆栈应该包含指向 Node 或Node*.

对不起这是我的错!


推荐阅读