• 【算法集训专题攻克篇】第二十一篇之堆


    算法集训传送门

      👉引言

    在这里插入图片描述

    铭记于心
    🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉

    💖 ❄️我们的算法之路❄️💖

       众所周知,作为一名合格的程序员,算法 能力 是不可获缺的,并且在算法学习的过程中我们总是能感受到算法的✨魅力✨。
                  ☀️🌟短短几行代码,凝聚无数前人智慧;一个普通循环,即是解题之眼🌟☀️
       💝二分,💝贪心,💝并查集,💝二叉树,💝图论,💝深度优先搜索(dfs),💝宽度优先搜索(bfs),💝数论,💝动态规划等等, 路漫漫其修远兮,吾将上下而求索! 希望在此集训中与大家共同进步,有所收获!!!🎉🎉🎉

    在这里插入图片描述


    今日主题:堆


     👉⭐️第一题💎

       ✨题目

          剑指 Offer II 054. 所有大于等于节点的值之和

    在这里插入图片描述

    • 关于二叉搜索树,相信大家并不陌生,就是 root节点左边的子节点都小于该root 的value,而右节点都大于value,有一道简单的二叉搜索题,可以看下图:
      在这里插入图片描述
      对于本文首题来说,首先是
    • 暴力原则上都是可行的,暴力 遍历每个节点,然后以此节点为评判标准,再去搜索二叉树子节点,找遍所有满足条件的节点,最终累加替换,可以用记忆化搜索优化,但时间复杂度较高(O(n2))
    • 根据二叉搜索树的特性可知,其顺序中序遍历可以得到 递增节点,那么对于每个节点,从后往前累加,就是所有大于等于该节点的和了,也就是使用逆序中序遍历,时间复杂度为 O(n),相对来说快很多

       ✨代码

    class Solution {
        private int sum;// 记录比当前节点大的节点和
        public TreeNode convertBST(TreeNode root) {
            dfs(root);// 进行深度优先遍历
            return root; // 返回树的根节点
        }
        private void dfs(TreeNode root){
            // 当 root 为空,则结束递归
            if(root == null) return;
            // 遍历右节点
            dfs(root.right);
            // 将当前节点的值加上前面比它大的节点和
            int val = root.val;
            root.val += sum;
            // 更新节点和
            sum += val;
            // 遍历左节点
            dfs(root.left);
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    🌹写在最后💖
    相信大家对今天的集训内容的理解与以往已经有很大不同了吧,或许也感受到了算法的魅力,当然这是一定的,路漫漫其修远兮,吾将上下而求索!伙伴们,明天见!🌹🌹🌹在这里插入图片描述

  • 相关阅读:
    深度解读ChatGPT基本原理
    【CSS】不定区间进度条
    Flowable工作流中会签节点处理回退并清除审批意见
    Pikachu靶场之SSRF服务器端请求伪造
    flex_dashboard
    3D立体相册不过是冷锋蓝plus版 html+css
    基于STM32+华为云IOT设计的智能衣柜
    Tomcat服务器和Web开发介绍
    无法加载文件 C:\Users\haoqi\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本
    TensorFlow入门(十四、数据读取机制(1))
  • 原文地址:https://blog.csdn.net/runofsun/article/details/125964103