0

i can't figure out what's wrong with this code. when i run it, i got this error message "error: no viable conversion from 'TreeNode' to 'TreeNode *' std::cout << s.preorderTraversal(t) << std::endl;"

#include<iostream>
#include<stack>
#include<vector>

struct TreeNode{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x): val(x), left(NULL), right(NULL){}
};

class Solution {
public:
    std::vector<int> preorderTraversal(TreeNode* root)
    {
        std::vector<int> res;
        std::stack<TreeNode*> s;
        s.push(root);
        while(!s.empty())
        {
            TreeNode* top = s.top();
            s.pop();
            if(!top)
                res.__emplace_back(top->val);
            s.push(top->right);
            s.push(top->left);
        }
        return res;
    }
};

int main()
{
    Solution s;
    TreeNode t(1);
    std::cout << s.preorderTraversal(t) << std::endl;
}
JJJIN
  • 35
  • 5

1 Answers1

1

t is not a TreeNode* pointer, as expected by preorderTraversal().

Either declare t as a pointer:

TreeNode * t = new TreeNode(1);
std::cout << s.preorderTraversal(t) << std::endl;
...
delete t;

Or pass t as a pointer to preorderTraversal():

TreeNode t(1);
std::cout << s.preorderTraversal(&t) << std::endl;

Or change the definition of preorderTraversal() to accept a non-pointer parameter:

std::vector<int> preorderTraversal(TreeNode& root)
...
TreeNode t(1);
std::cout << s.preorderTraversal(t) << std::endl;

This is for your compilation problem. The next problem will be about trying to print a std::vector. You should read this.

Remy Lebeau
  • 555,201
  • 31
  • 458
  • 770
A. Ocannaille
  • 306
  • 4
  • 14