LeetCode 第十七天

110. 平衡二叉树

class Solution {
   
public:
    int getHeight(TreeNode* node)
    {
   
        if(node == nullptr)
            return 0;
            //左子树高度和右子树高度分别计算
        int leftHeight = getHeight(node -> left);
        int rightHeight = getHeight(node -> right);
        // 只要有一边子树返回-1,则证明该子树已经不平衡,向上返回结果
        if(leftHeight == -1 || rightHeight == -1)
            return -1;
        //如果到目前为止子树平衡,比较该层是否平衡 
        if(abs(leftHeight - rightHeight) > 1)
            return -1;
        else
        // 返回本层树高
            return 1 + max(leftHeight, rightHeight);
    }
    bool isBalanced(TreeNode* root) {
   
        int res = getHeight(root);
        if(res == -1)
            return false;
        else    
            return true;
    }
};

257. 二叉树的所有路径

class Solution {
   
public:
// 回溯法,把递归的过程表示出来了
    void traversal(TreeNode* node, vector<int>& vec, vector<string>& path)
    {
   
        // 由于判定递归结束条件变为叶子结点结束,因此叶子结点需要考虑到,先来放入结点
        vec.push_back(node->val);
        // 左节点和右节点均为空, 则表明该节点为叶子结点
        if(node -> left == nullptr && node -> right == nullptr)
        {
   
            // 字符串拼接逻辑,注意int->string 函数是 to_string()函数
            string sPath = "";
            for(int i = 0; i<vec.size()-1; i++)
            {
   
                sPath += to_string(vec[i]);
                sPath += "->";
            }
            sPath += to_string(vec[vec.size()-1]);
            // 到叶子节点了,该干活了
            path.push_back(sPath);
        }
        // 此处判断不为空才调用函数
        if(node -> left)
        {
   
            // 左边子树遍历
            traversal(node -> left, vec, path);
            // 回溯的表现,类似于栈后入先出,pop_back()
            vec.pop_back();
        }
        if(node -> right)
        {
   
            traversal(node -> right, vec, path);
            vec.pop_back();
        }
    }
    vector<string> binaryTreePaths(TreeNode* root) {
   
        vector<int> vec;
        vector<string> path;
        // 此处判断根节点自己为空的情况
        if(root == nullptr)
            return path;
        traversal(root, vec, path);
        return path;
    }
};

404. 左叶子之和

class Solution {
   
public:
    int sumOfLeftLeaves(TreeNode* root) {
   
        if (root == nullptr)
            return 0;
            // 叶子结点
        if(root->left == nullptr && root->right == nullptr)
            return 0;
            // 向左遍历
        int leftvalue = sumOfLeftLeaves(root->left);
        // 如果一个节点的左节点为叶子结点,那么该左节点满足条件
        if(root->left && !root->left->left && !root->left->right)
        {
   
            leftvalue = root->left->val;
        }
        // 向右遍历
        int rightvalue = sumOfLeftLeaves(root->right);
        int sum = leftvalue + rightvalue;
        return sum;
    }
};

今天的题目还是比较绕的,需要再回顾掌握

相关推荐

  1. LeetCode

    2024-01-30 04:22:02       46 阅读
  2. LeetCode

    2024-01-30 04:22:02       35 阅读
  3. leetCode

    2024-01-30 04:22:02       39 阅读
  4. 学习Android的

    2024-01-30 04:22:02       24 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-30 04:22:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-30 04:22:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-30 04:22:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-30 04:22:02       20 阅读

热门阅读

  1. CountDownLatch使用及原理介绍

    2024-01-30 04:22:02       40 阅读
  2. AcWing.873.欧拉函数

    2024-01-30 04:22:02       29 阅读
  3. VUE就是最强!

    2024-01-30 04:22:02       34 阅读
  4. 十个鼠标事件

    2024-01-30 04:22:02       41 阅读
  5. 1.基于C#的Dbf读写(文件结构概述)

    2024-01-30 04:22:02       32 阅读
  6. cpp-stub 打桩失败

    2024-01-30 04:22:02       40 阅读
  7. 题解:CF1922C(Closest Cities)

    2024-01-30 04:22:02       35 阅读
  8. 面试 CSS 框架八股文十问十答第一期

    2024-01-30 04:22:02       42 阅读
  9. C++算法学习心得七.贪心算法(2)

    2024-01-30 04:22:02       21 阅读
  10. Quartz在spring boot项目中重启后不能继续执行问题

    2024-01-30 04:22:02       32 阅读
  11. OpenSSH 9.6/9.6p1 (2023-12-18)的发布说明(中文译文)

    2024-01-30 04:22:02       41 阅读
  12. Apache孵化器领路人与导师的职责

    2024-01-30 04:22:02       46 阅读