代码随想录算法训练营第十七天|LeetCode110 平衡二叉树、LeetCode257 二叉树的所有路径

题1:

指路:LeetCode110 平衡二叉树
思路与代码:

左右子树的高度差小于等于1。对于这个题,递归比迭代方便太多,我也想过迭代,但是我没有写出来,大家可以自己试一下。递归代码如下:

cpp 复制代码
class Solution {
public:
    //递归
    int getHeight  (TreeNode* node) {
        if (node == NULL) {return 0;}
        int leftHeight = getHeight(node->left);
        if (leftHeight == -1) return -1;
        int rightHeight = getHeight(node->right);
        if (rightHeight == -1) return -1;
        int ans = abs(leftHeight - rightHeight);
        if (ans > 1) return -1;  // 绝对值超过1符合条件
        else return 1 + max(leftHeight, rightHeight);
       /* return abs(leftHeight - rightHeight) > 1 ? -1 : 1 + max(leftHeight, rightHeight);*/
    } 
    bool isBalanced(TreeNode* root) {
    if (getHeight(root)== -1) 
    return false;
    return true;
    /*return getHeight(root) == -1 ? false : true;*/
    }
};

题2:

指路:LeetCode257 二叉树的所有路径
思路与代码:

递归进行前序遍历,找到子节点记录路径之后回溯回退路径。我还没会呢,先看看代码吧。

cpp 复制代码
class Solution {
private:
    void treversal(TreeNode* cur, vector<int>& path, vector<string>& result) {
        path.push_back(cur->val);
        if (cur->left == NULL && cur->right == NULL) {
            string sPath;
            for (int i = 0; i < path.size() - 1; i++) {
                sPath += to_string(path[i]);
                sPath += "->";
            }
            sPath += to_string(path[path.size() - 1]);
            result.push_back(sPath);
            return ;
        }
        if (cur->left) {
            treversal(cur->left, path, result);
            path.pop_back();
        }
        if (cur->right) {
            treversal(cur->right, path, result);
            path.pop_back();
        }
    }
    public:
    vector<string> binaryTreePaths(TreeNode* root) {
    vector<string> result;
    vector<int> path;
    if (root == NULL) return result;
    treversal(root, path, result);
    return result;
    }
};
相关推荐
键盘会跳舞10 小时前
C++:std::tuple 源码级深度拆解——变参模板、SFINAE与模板元编程核心技巧
开发语言·c++·sfinae·变参模板
bkspiderx10 小时前
从零开始:VS Code搭建C/C++开发环境全指南(Windows/macOS/Linux)
c语言·c++·windows·vs code·c/c++开发环境
东华万里10 小时前
第40篇C++核心基础与工程实践:从底层逻辑到避坑指南
开发语言·c++·面试·大学生专区
luj_176811 小时前
元设计的诱惑与现实
c语言·开发语言·c++·经验分享·算法
小星星闪亮登场11 小时前
ST表--倍增思想
开发语言·数据结构·c++·算法·思维
东华万里11 小时前
第40篇 C++核心基础与工程实践:从底层逻辑到避坑指南
开发语言·c++·大学生专区
AC赳赳老秦11 小时前
OpenClaw 多源采集公开行业数据:从原始信息到研究报告初稿的自动化实践
java·c语言·c++·python·php·deepseek·openclaw
玩三国杀玩的11 小时前
Pytorch-c++-CUDA
c++·pytorch·python·深度学习
马可家的菠萝11 小时前
Vue3 + Canvas 手绘笔记工程化实践:别把画布只当成一张 PNG
前端·vue.js·算法
watersink11 小时前
机器学习极大似然估计与EM算法
人工智能·算法·机器学习