【代码随想录第十七天|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和】

本文介绍了在ACWing网站上的编程挑战,包括平衡二叉树的判断、二叉树所有路径的查找和左叶子之和的计算,通过递归和深度优先搜索的方法,强调了遇到问题时回顾题干的重要性。
摘要由CSDN通过智能技术生成

代码随想录第十七天|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

思路代码来源:http://acwing.com

110.平衡二叉树

我是一看就会,一写就废。先看代码:

class Solution {
public:
    bool res;
    bool isBalanced(TreeNode* root) {
        if(!root) return true;
        res = true;
        dfs(root);
        return res;
    }
    int dfs(TreeNode* root)
    {
        if(!root) return true;
        int lt = dfs(root->left);
        int rt = dfs(root->right);
        if(abs(lt - rt) > 1) res = false;
        return max(lt,rt) + 1;
    }
};

我还是那句话递归是看着简单,但是难写,所以我还是积累积累经验,这里的平衡二叉树的主要思想就是左右的高低差不超过一,可以用绝对值来判断,首先判断根节点,然后对左右子树进行分析,这里我解释一下为什么用max(),因为只要保证高度差不超过1,当然要选择最高的来比较。

257. 二叉树的所有路径

class Solution {
public:
    vector<string> res;
    vector<int> path;

    vector<string> binaryTreePaths(TreeNode* root) {
        if(!root) return res;
        dfs(root);
        return res;
    }
    void dfs(TreeNode* root)
    {
        path.push_back(root->val);
        if(!root->left && !root->right)
        {
            string line = to_string(path[0]);
            for(int i = 1;i < path.size();i++)
            {
                line += "->" + to_string(path[i]);
            }
            res.push_back(line);
        }
        else
        {
            if(root->left) dfs(root->left);
            if(root->right) dfs(root->right);
        }
        path.pop_back();
    }
};

这道题目感觉有点回溯的意思,但是涉及的不是很深,这段代码感觉挺有意思,res存储最后结果,path存储每一条路径,上来老规矩,判断根节点,然后,先往路径上存值,这里先push,后pop,有人会问是不是这个数进去,然后过一会就出来了?不是,问这个问题的人还需要再看看递归,从root开始(如果root不为空的话),然后向左右子树去遍历,每次都把值记录到path里面,当遇到叶子节点的时候,就将叶子前进到path的值全部用->连接,并且用to_string()转化,最后全部出path。

404.左叶子之和

先看代码:

class Solution {
public:
    int res = 0;

    int sumOfLeftLeaves(TreeNode* root) {
        if(!root) return 0;
        dfs(root);
        return res;
    }

    void dfs(TreeNode* root)
    {
        if(!root) return;
        if(root->left)
        {
            if(!root->left->left && !root->left->right)
                res += root->left->val;
        }
        dfs(root->left);
        dfs(root->right);
    }
};

这道题我觉得简单,但是也难,不好说,可能就是递归自己写不好写。

总结:

遇事不决,回去看题干。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值