没有从"树节点"到"树节点*"的可行转换

no viable conversion from 'TreeNode' to 'TreeNode* '

本文关键字:树节点 转换      更新时间:2023-10-16

我无法弄清楚这段代码出了什么问题。 当我运行它时,我收到此错误消息 "错误:没有从'树节点'到'树节点*'的可行转换 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;
}

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

t声明为指针:

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

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

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

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

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

这是针对您的编译问题。 下一个问题将是关于尝试打印std::vector。你应该阅读这篇文章。