算法专题[递归-搜索-回溯-2-DFS]

算法专题[递归-搜索-回溯-2-DFS]

  • 一.计算布尔二叉树的值:
    • 1.思路一:
    • 2.GIF题目解析
  • 二.求根节点到叶子节点的数字之和
    • 1.思路一:
    • 2.GIF题目解析
  • 三.二叉树剪枝
    • 1.思路一:
    • 2.GIF题目解析
  • 四.验证二叉搜索树
    • 1.思路一:
    • 2.GIF题目解析
  • 五.二叉搜索树中第k小的元素
    • 1.思路一:
    • 2.GIF题目解析
  • 六.二叉树的所有路径
    • 1.思路一:
    • 2.GIF题目解析

一.计算布尔二叉树的值:

在这里插入图片描述
计算布尔二叉树的值

1.思路一:

在这里插入图片描述

class Solution {
public:
    bool evaluateTree(TreeNode* root) {
        if(root->left==nullptr && root->right==nullptr)
            return (root->val==1? true:false);

        bool left = evaluateTree(root->left);
        bool right = evaluateTree(root->right);

        return root->val = (root->val==2? (left||right):(left&&right));
    }
};

2.GIF题目解析

在这里插入图片描述

二.求根节点到叶子节点的数字之和

在这里插入图片描述
求根节点到叶子节点的数字之和

1.思路一:

在这里插入图片描述

class Solution {
public:
    int dfs(TreeNode* root , int sum)
    {
        if(root==nullptr)
            return 0;
        sum = (sum*10)+(root->val);
        if(root->left==nullptr && root->right==nullptr)
        {
            return sum;
        }
        int ret = 0 ;
        if(root->left != nullptr) ret += dfs(root->left , sum );
        if(root->right != nullptr) ret += dfs(root->right , sum );
        return ret;
    }
    int sumNumbers(TreeNode* root) {
        return dfs(root , 0);;
    }
};

2.GIF题目解析

在这里插入图片描述

三.二叉树剪枝

在这里插入图片描述

二叉树剪枝

1.思路一:

在这里插入图片描述

class Solution {
public:
    TreeNode* pruneTree(TreeNode* root) {
        if(root==nullptr)
            return nullptr;
        
        root->left = pruneTree(root->left);
        root->right = pruneTree(root->right);

        if(root->left==nullptr && root->right==nullptr && root->val==0)
        {
            delete root;
            root = nullptr;
        }
        return root;
    }
};

2.GIF题目解析

请添加图片描述

四.验证二叉搜索树

在这里插入图片描述
验证二叉搜索树

1.思路一:

在这里插入图片描述

class Solution {
public:
    bool isValidBST(TreeNode* root) {
        if(root==nullptr)
            return true;
        
        bool left = isValidBST(root->left);
        if(root->val > prev)
            prev = root->val;
        else 
            return false;
        bool right = isValidBST(root->right);
        
        return left&&right;
    }
    long prev = LONG_MIN;
};

在这里插入图片描述

class Solution {
public:
    bool isValidBST(TreeNode* root) {
        if(root==nullptr)
            return true;
        
        bool left = isValidBST(root->left);
        if(left && root->val > prev)
            prev = root->val;
        else 
            return false;
        bool right = isValidBST(root->right);
        
        return left&&right;
    }
    long prev = LONG_MIN;
};

在这里插入图片描述

2.GIF题目解析

五.二叉搜索树中第k小的元素

在这里插入图片描述
二叉搜索树中第k小的元素

1.思路一:

在这里插入图片描述

class Solution {
public:
    void dfs_1(vector<int>& dfs1 , TreeNode* root)
    {
        if(root==nullptr)
            return;
        
        int n = root->val;
        dfs1.push_back(n);
        dfs_1(dfs1 , root->left);
        dfs_1(dfs1 , root->right);
    }
    int kthSmallest(TreeNode* root, int k) {
        //1.遍历:
        vector<int> dfs;
        dfs_1(dfs ,root);
        //2.排序:
        sort(dfs.begin(),dfs.end());
        return dfs[k-1];
    }
};

2.GIF题目解析

六.二叉树的所有路径

在这里插入图片描述
二叉搜索树的所有路径

1.思路一:

1.模拟路径去走判断到叶子节点然后给一个参数去push_back()
2.思路的函数参数是比较好的通过这样的参数可以解决很多问题。
3.特殊情况判断:只有一个节点的判断!

class Solution {
public:
    void dfs(TreeNode* root , string s , vector<string>& ret)
    {
        if(root == nullptr)
            return;

        int n = root->val;
        s += "->";
        s += to_string(n);

        //表示当前是叶子节点
        if(root->left == nullptr && root->right==nullptr)
        {
            ret.push_back(s);
            return;
        }
        dfs(root->left , s , ret);
        dfs(root->right , s , ret);
    }
    vector<string> binaryTreePaths(TreeNode* root) {
        string s = to_string(root->val);
        vector<string> ret;
        if(root->left == nullptr && root->right==nullptr)
        {
            ret.push_back(s);
        }
        else
        {
            dfs(root->left , s , ret);
            dfs(root->right , s , ret);
        }
        return ret;
    }
};

2.GIF题目解析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/338648.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

触摸屏监控双速电动机-硬件设计1

主电路设计 主电路如图所示。三相总电源从前门配电箱的-X1-1接线端子排引出&#xff0c;给混料泵电动机供三相电&#xff0c;给PLC供单相电。混料泵电动机用KM3主触点接通低速&#xff0c;用KM4的主触点和辅助触点接通高速。注意&#xff0c;高低速切换时&#xff0c;双速电动…

18G大小的R包 | 将你需要的R包全部下载

写在前面 在上周&#xff0c;我们在社群讨论。安装R包是个玄学”有时候真的很奇怪&#xff0c;在自己的电脑上就是无法安装&#xff0c;但是在其他电脑都可以正常安装…&#xff0c;不是感到很无语&#xff1f;&#xff1f;&#xff1f;&#xff1f;没有办法&#xff0c;类似的…

数据结构之栈和队列

数据结构之栈和队列 1、栈1.1、栈的定义及基本运算1.2、栈的存储结构 2、队列2.1、队列的定义及基本运算2.2、队列的存储结构2.3、队列的应用 数据结构是程序设计的重要基础&#xff0c;它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从…

【计算机网络】【Python】【练习题】【新加坡南洋理工大学】【Computer Control Network】

一、题目描述 该题目描述一个网络中数据包交换&#xff08;Packet Switching&#xff09;的例子。题目如下&#xff1a; 二、问题解答&#xff08;使用Python&#xff09; Q1&#xff1a;如何求出0.0004这个值&#xff1f; &#xff08;1&#xff09;、公式推导过程&#xf…

4.servera修改主机名,配置网络,以及在cmd中远程登录servera的操作

1.先关闭这两节省资源 2.对于新主机修改主机名&#xff0c;配置网络 一、配置网络 1.推荐图形化界面nmtui 修改完成后测试 在redhat ping一下 在redhat远程登录severa 2、使用nmcli来修改网络配置 2.1、配置要求&#xff1a;主机名&#xff1a; node1.domain250.exam…

<信息安全>《1 国内主要企业网络安全公司概览(一)》

1 深信服科技股份有限公司 信息内容LOGO成立日期2000年12月25日成立。总部深圳市南山区学苑大道1001号南山智园A1栋是否上市深信服[300454]A股市值265亿主要产品企业级网络安全云计算IT基础设施数据通信物联网员工规模9000人分支机构全球50多个荣誉国家级高新技术企业、中国软…

JVM系列-3.类的生命周期

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理&#x1f525;如果感觉博主的文…

Kotlin协程的JVM实现源码分析(下)

协程 根据 是否保存切换 调用栈 &#xff0c;分为&#xff1a; 有栈协程&#xff08;stackful coroutine&#xff09;无栈协程&#xff08;stackless coroutine&#xff09; 在代码上的区别是&#xff1a;是否可在普通函数里调用&#xff0c;并暂停其执行。 Kotlin协程&…

NG+WAF实现应用安全访问

一、基本概念 什么是waf&#xff1f; Web应用防火墙&#xff08;waf&#xff09;是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品&#xff0c;WAF是一种工作在应用层的、通过特定的安全策略来专门为Web应用提供安全防护的产品。 什么是ngx_lua_…

2024年开年的荣誉--来自国产数据库

上周在北京参加了阿里云的开发者大会&#xff0c;我因为去年做了一点小贡献。非常荣幸的获得了阿里云的MVP的这个殊荣。&#xff08;期间也认识了一些大神级的人物&#xff09;还有就是一些网上认识的打卡们线下见面。 这个也是我一直追求的荣誉。 几乎在同时P&#xff08;Ping…

单机zk--数据恢复,处理客户端接入,两种超期机制,处理客户端请求,客户端主动断开

1.概述 zk是一个分布式内存数据库。既然是数据库&#xff0c;就需要处理客户端发送过来的读&#xff0c;写请求。随着请求执行&#xff0c;不断更改数据实体。 作为内存数据库&#xff0c;数据实体全部加载到内存&#xff0c;在内存修改。我们把客户端发来的请求叫做事务&…

SpringCloud之OpenFeign的学习、快速上手

1、什么是OpenFeign OpenFeign简化了Http的开发。在RestTemplate的基础上做了封装&#xff0c;在微服务中的服务调用发送网络请求起到了重要的作用&#xff0c;简化了开发&#xff0c;可以让我们跟写接口一样调其他服务。 并且OpenFeign内置了Ribbon实现负载均衡。 官方文档…

【RT-DETR有效改进】华为 | Ghostnetv1一种专为移动端设计的特征提取网络

前言 大家好&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持ResNet32、ResNet101和PP…

代码随想录二刷 | 回溯 | 组合优化

代码随想录二刷 &#xff5c; 回溯 &#xff5c; 组合优化 剪枝优化 剪枝优化 在遍历的过程中有如下代码&#xff1a; for (int i startIndex; i < n; i) {path.pop_back();backtracking(n, k, i 1);path.pop_back(); }n 4&#xff0c;k 4的话&#xff0c;那么第一层f…

SQL注入实战:盲注

盲注&#xff1a; 1、当攻击者利用SQL注入漏洞进行攻击时&#xff0c;有时候web应用程序会显示&#xff0c;后端数据库执行SQL查询返回的错误信息&#xff0c;这些信息能帮助进行SQL注入&#xff0c;但更多时候&#xff0c;数据库没有输出数据web页面&#xff0c;这是攻击者会…

flutter 实现定时滚动的公告栏的两种不错方式

相同的部分 自定义一个类继承StatefulWidget 所有公告信息存放在list里 第一种 scrollControllerAnimatedContainer 逻辑如下 我们可以发现启动了一个timer计时器计时5秒&#xff0c;hasClients检查其目标对象&#xff08;我们用的是listview&#xff09;是否被渲染&#x…

文件重命名技巧:如何使用编号快速高效地重命名大量文件的方法

在处理大量文件时&#xff0c;我们经常需要对其进行重命名&#xff0c;以便更好地组织和管理。然而&#xff0c;手动重命名每个文件既耗时又容易出错。为了解决这个问题&#xff0c;我们可以利用一些简单的编号技巧来快速高效地重命名大量文件。下面将介绍一种简单而实用的方法…

【好文翻译】JavaScript 中的 realm 是什么?

本文由体验技术团队黄琦同学翻译。 原文链接&#xff1a; https://weizmangal.com/2022/10/28/what-is-a-realm-in-js/ github仓库地址&#xff1a; https://github.com/weizman/weizman.github.io/blob/gh-pages/_posts/2020-02-02-what-is-a-realm-in-js.md 前言 作为我对…

前端安全相关

请求后端接口必须带上sign 以上主要是解决&#xff1a;除了数据泄露外&#xff0c;一些重要功能的接口如果没有做好保护措施也会被恶意调用造成DDoS、条件竞争等攻击效果 一些营销活动类的Web页面&#xff0c;领红包、领券、投票、抽奖等活动方式很常见。此类活动对于普通用户…