二叉树相关题型C++

根据二叉树创建字符串

链接

在这里插入图片描述

思路:需要注意的是左右子树的处理,如果左子树为空的话且右子树不为空,要添加一组()来区分左右子树,如果是右树为空则不用处理

在这里插入图片描述

class Solution {
   
public:
    string tree2str(TreeNode* root) {
   
        if(root == nullptr)
        return string(); //返回匿名对象

        string str;
        str += to_string(root->val);//用to_string把整数转换为字符
        //1,左不空或左边为空,右边不为空
        if(root->left || root->right)
        {
   
            str += '(';
            str += tree2str(root->left);
            str += ')';
        }
        //2,右不为空
        if(root->right)
        {
   
            str += '(';
            str += tree2str(root->right);
            str += ')';
        }
        return str;
    }
};

我们可以注意下这个函数的返回值是string,我们没有用到引用,如果这个树的结构比较大,就会存在大量的string的深拷贝,如何减少深拷贝呢?

我这里的方法是用一个子函数

class Solution {
   
public:
    string tree2str(TreeNode* root) {
   
        string str;
        _tree2str(root, str);
        return str;
    }
    void _tree2str(TreeNode* root, string & str) //引用会减少深拷贝
    {
   
        if(root == nullptr)
        {
   
            return;
        }
        str += to_string(root->val);
        if(root->left || root->right)
        {
   
            str += '(';
            _tree2str(root->left,str);
            str += ')';
        }
        if(root->right)
        {
   
            str += '(';
            _tree2str(root
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
二叉树的层序遍历是指按照从上到下、从左到右的顺序访问二叉树的节点,并将节点按层级分组。对于给定的二叉树,我们可以使用队列来实现层序遍历。 以下是一个使用队列进行二叉树层序遍历的C++代码示例: ```c++ class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> result; queue<TreeNode*> que; if (root != nullptr) { que.push(root); } while (!que.empty()) { vector<int> temp; int length = que.size(); for (int i = 0; i < length; i++) { TreeNode* tempNode = que.front(); que.pop(); temp.push_back(tempNode->val); if (tempNode->left) { que.push(tempNode->left); } if (tempNode->right) { que.push(tempNode->right); } } result.push_back(temp); } return result; } }; ``` 以上代码实现了一个名为`levelOrder`的函数,该函数接受一个二叉树的根节点作为参数,并返回一个二维向量,表示二叉树的层序遍历结果。在函数内部,我们首先创建一个空的二维向量`result`用于存储结果,然后创建一个队列`que`用于辅助遍历。如果给定的二叉树不为空,我们将根节点入队。接下来,我们使用循环来遍历队列中的节点,并将节点的值存储到一个临时向量`temp`中。在遍历过程中,如果当前节点有左子节点,我们将左子节点入队;如果当前节点有右子节点,我们将右子节点入队。当遍历完一层后,我们将临时向量`temp`存储到结果向量`result`中,并继续下一层的遍历。最后,我们返回结果向量`result`。 希望以上解答对您有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [二叉树的层次遍历(C++)](https://blog.csdn.net/weixin_42817333/article/details/125110191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习新算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值