首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从“TreeNode”到“TreeNode*”没有可行的转换

从“TreeNode”到“TreeNode*”没有可行的转换
EN

Stack Overflow用户
提问于 2020-01-06 15:59:57
回答 1查看 1K关注 0票数 0

我不知道这段代码有什么问题。当我运行它时,我得到了以下错误消息:“TreeNode:没有可行的从'TreeNode‘到'TreeNode *’std::cout << s.preorderTraversal(t) << std::endl;”

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-06 16:08:57

t不是TreeNode*指针,正如preorderTraversal()所期望的那样。

要么将t声明为指针:

代码语言:javascript
复制
TreeNode * t = new TreeNode(1);
std::cout << s.preorderTraversal(t) << std::endl;
...
delete t;

或者将t作为指向preorderTraversal()的指针传递

代码语言:javascript
复制
TreeNode t(1);
std::cout << s.preorderTraversal(&t) << std::endl;

或更改preorderTraversal()的定义以接受非指针参数:

代码语言:javascript
复制
std::vector<int> preorderTraversal(TreeNode& root)
...
TreeNode t(1);
std::cout << s.preorderTraversal(t) << std::endl;

这是为您的编译问题。下一个问题是尝试打印一个std::vector。你应该read this

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59615215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档