说明:所有内容为参考书籍以及他人博客总结,为个人学习笔记所用。
还是按照根左右,左根右,左右根,这个基本的顺序来写就行了,只不过这个C++的代码,vector的这一部分有一点不懂,难崩!
res.push_back(roo ->val); 这段代码是C++中的命令,用于向一个叫做res`的容器(通常是std::vector类型的容器)添加一个元素。具体来说:
res:这是一个容器(比如vector,deque等),用于存储数据。
push_back`:这是容器的一个成员函数,作用是在容器的末尾添加一个新的元素。*
root->val:这部分涉及到指向二叉树节点(或类似结构)的指针。root是指向当前正在处理的树节点的指针,->是用来访问指针所指向对象的成员(在这里是节点的值),val就是该树节点的值。
综上所述,整行代码的意思是:将当前树节点root的值添加到名为res的容器的末尾。这样的操作常见于遍历(如前序、中序、后序遍历)二叉树时,收集树中节点值的过程。
vector<int>&res 在 C++ 中表示一个对 vector<int> 类型的引用。这里具体解释如下:
vector<int>:这是一个使用了 int 类型的模板类 vector 的实例。简单来说,*它是一个可以动态改变大小的整数数组。*由于它是模板类 vector 的特化版本,专门用于存储 int 类型的元素。
&:这是取址符,用来声明一个引用。当它用于变量声明之前时,表明你正在定义一个引用变量。引用本质上是一个别名,是对另一个已经存在的对象的别名。也就是说,vector<int>&res 并不直接存储 vector 对象,而是作为一个已存在 vector<int> 对象的另一个名字来使用。
res:这是引用变量的名称。通过 res,你可以访问和修改它所引用的那个 vector<int> 对象的内容,就像直接操作该对象本身一样。
综上所述,vector<int>&res 是一个引用,它引用了一个 vector<int> 类型的对象。这种方式通常用于函数参数传递时,以避免复制整个 vector 对象,从而提高效率。当函数需要修改传递进来的 vector 内容或者该 vector 很大时,使用引用可以更高效地操作数据。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
/*这个为什么要在搞一个函数的存在? 不是那么的理解*/
void preorder(TreeNode * root,vector<int>&res)
{
if(root == nullptr)
{
return;
}
res.push_back(root -> val);
preorder(root -> left,res);
preorder(root -> right,res);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
preorder(root , res);
return res;
}
};
作者:烟花真的易冷
链接:https://leetcode.cn/problems/binary-tree-preorder-traversal/solutions/2757883/144-er-cha-shu-de-qian-xu-bian-li-by-yan-r256/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。