leetcode 144. 二叉树的前序遍历

说明:所有内容为参考书籍以及他人博客总结,为个人学习笔记所用。

还是按照根左右,左根右,左右根,这个基本的顺序来写就行了,只不过这个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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值