leetcode二叉树

leetcode二叉树,第1张

二叉树进阶
  • 进阶根据二叉树创建字符串
  • 进阶根据二叉树创建字符串
  • 二叉树的层序遍历(变1)

进阶根据二叉树创建字符串

题目链接
题目描述
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。



空节点则用一对空括号 “()” 表示。


而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对


思路

  1. 下面注释代码过不了?????提示

代码如下:

class Solution {
public:
    void _tree2str(TreeNode* root, string& ret)
    {
        if(root==nullptr)
            return;
        else
        {
            // if(root->val<0) //这个通不过
            // {
            //     root->val*=(-1);
            //     ret.push_back('-');
            //     ret.push_back(root->val+'0');
            // }
            // else
            //     ret.push_back(root->val+'0');
            ret+=to_string(root->val);
        }
        if(root->left==nullptr&&root->right==nullptr)
        {
            _tree2str(root->left,ret);
            //return;
        }
        else if(root->left&&root->right==nullptr)
        {
            ret.push_back('(');
            _tree2str(root->left,ret);
            ret.push_back(')');
        }
        else if(root->left==nullptr&&root->right)
        {
            ret.push_back('(');
            ret.push_back(')');
            ret.push_back('(');
            _tree2str(root->right,ret);
            ret.push_back(')');
        }
         else {
            ret.push_back('(');
            _tree2str(root->left,ret);
            ret.push_back(')');
            ret.push_back('(');
            _tree2str(root->right,ret);
            ret.push_back(')');
        }
    }
    string tree2str(TreeNode* root) {
        string ret;
        //ret.push_back(root->val+'0');
        _tree2str(root, ret);
        return ret;
        
    }
};

进阶根据二叉树创建字符串

题目链接
题目描述

输入:
输出:


思路
1.
代码如下:


二叉树的层序遍历(变1)

题目链接
题目描述
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。


(即逐层地,从左到右访问所有节点


思路

  1. 记录每层的size

代码如下:

class Solution {
public:
   vector<vector<int>> levelOrder(TreeNode* root) {
       vector<int> tmp={};
       vector<vector<int>> ret;
       if(root==nullptr)
           return ret;
       
       
       queue<TreeNode*> qu;
       int size=1;
       qu.push(root);
       while(!qu.empty())
       {
           while(size--)
           {
               if(qu.front()->left)
                   qu.push(qu.front()->left);
               if(qu.front()->right)
                   qu.push(qu.front()->right);
               tmp.push_back(qu.front()->val);
               qu.pop();
           }
           ret.push_back(tmp);
           tmp.clear();
           size=qu.size();
       }
       return ret;

   }
};

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/584960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存