代码随想录算法训练营第十七天|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;
    }
};
相关推荐
h^hh6 分钟前
洛谷 P3405 [USACO16DEC] Cities and States S(详解)c++
开发语言·数据结构·c++·算法·哈希算法
玦尘、6 分钟前
位运算实用技巧与LeetCode实战
算法·leetcode·位操作
重生之我要成为代码大佬13 分钟前
Python天梯赛10分题-念数字、求整数段和、比较大小、计算阶乘和
开发语言·数据结构·python·算法
Best_Me0742 分钟前
【CVPR2024-工业异常检测】PromptAD:与只有正常样本的少样本异常检测的学习提示
人工智能·学习·算法·计算机视觉
HBryce241 小时前
缓存-算法
算法·缓存
Dreams°1231 小时前
【透过 C++ 实现数据结构:链表、数组、树和图蕴含的逻辑深度解析】
开发语言·数据结构·c++·mysql
eso19831 小时前
Spark MLlib使用流程简介
python·算法·spark-ml·推荐算法
夏末秋也凉1 小时前
力扣-回溯-93 复原IP地址
算法·leetcode
Erik_LinX1 小时前
算法日记27:完全背包(DFS->记忆化搜索->倒叙DP->顺序DP->空间优化)
算法·深度优先
AC使者1 小时前
D. C05.L08.贪心算法入门(一).课堂练习4.危险的实验(NHOI2015初中)
算法·贪心算法