没有从"树节点"到"树节点*"的可行转换
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;
}
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
。你应该阅读这篇文章。
相关文章:
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 没有从"树节点"到"树节点*"的可行转换
- 对树节点使用 CString 时出现内存泄漏
- 预分配的节点向量中的无锁树节点分配
- 接受来自键盘的树节点以确定其高度
- C++ Eclipse:二叉搜索树节点>数据=变量似乎不起作用
- C++错误(从不兼容的类型"void"分配给树节点*)
- UWP:在树节点中将文本设置为粗体
- 树节点之间的最大距离中的运行时错误
- 想要以最新的添加节点完整返回树节点的根
- 错误:无法从节点*转换为节点 c++?
- 红黑树的转换无效
- 指针取消引用:无法将“节点**”转换为“节点*”
- 从GCC功能树节点中检索函数参数
- 如何映射数组元素以选择二进制树节点
- Boost::p tree - 访问列表中包含的属性树节点
- 二进制搜索树节点插入
- 根据其子节点的余额计算 AVL 树节点余额
- C++目录树数据转换为矢量
- C++中的树实现:无法将节点转换为节点*