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

news2025/1/15 6:35:29

算法专题[递归-搜索-回溯-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题目解析

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++学习笔记——指针

1&#xff0c;指针的基本概念 指针的作用&#xff1a;可以通过指针间接访问内存 内存的编号是从0开始记录的&#xff0c;一般用十六进制数字表示可以利用指针变量保存地址 上图中的p就是a变量的指针&#xff0c;也可以记作*a 2&#xff0c;指针变量的定义和使用 指针变量定…

AI大模型开发架构设计(3)——如何打造自己的大模型

文章目录 如何打造自己的大模型1 新时代职场人应用AIGC的5重境界2 人人需要掌握的大模型原理职场人都能听懂的大语音模型的训练过程职场人都能听得懂的大语言模型的Transformer推理过程 3 如何构建自己的大模型需要具备三个方面的能力LangChain是什么&#xff1f;LangChain主要…

【精选】中间件 tomcat漏洞复现

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

在腾讯云买了云服务器和域名如何快速建网站?

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网txyfwq.com分享使用腾讯云服务器建站教程&#xff0c;…

基于SQL的可观测性现状观察

本文字数&#xff1a;8975&#xff1b;估计阅读时间&#xff1a;23 分钟 作者&#xff1a;Ryadh Dahimene 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 1375年的加泰罗尼亚地图所展示的地中海地区。通商媒介语&#xff08;Lingua F…

深度学习记录--正则化(regularization)

什么是正则化&#xff1f; 正则化(regularization)是一种实用的减少方差(variance)的方法&#xff0c;也即避免过度拟合 几种正则化的方法 L2正则化 又被称为权重衰减(weight dacay) 在成本函数中加上正则项&#xff1a; 其中 由于在w的更新过程中会递减&#xff0c;即权…

STL---Stack和Queue

一、stack的介绍和使用 &#xff08;1&#xff09;介绍 翻译: &#xff08;1&#xff09;stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。 &#xff08;2&#xff09; stack是作为容器…

【2020】百度校招Java研发工程师笔试卷(第二批)算法题

贴一下我去年9月份写的博客 三道编程题&#xff0c;一道数学题&#xff0c;两道图论&#xff0c;哎嘿嘿&#xff0c;我就是不会做&#xff0c;哎嘿嘿&#xff0c;哭了。。。 一.最小值 牛牛给度度熊出了一个数学题&#xff0c;牛牛给定数字n,m,k&#xff0c;希望度度熊能找到…

【小沐学GIS】基于C#绘制三维数字地球Earth(OpenGL)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…

【二叉树练习2】

文章目录 判断是否是完全二叉树找出p和q的最近的公共祖先非递归实现前序遍历非递归实现中序遍历非递归实现后序遍历 判断是否是完全二叉树 boolean isCompleteTree(TreeNode root){if (root null){return true;}//创建队列Queue<TreeNode> queue new LinkedList<>…

文心一言 VS 讯飞星火 VS chatgpt (183)-- 算法导论13.4 7题

七、用go语言&#xff0c;假设用 RB-INSERT 将一个结点 x 插入一棵红黑树&#xff0c;紧接着又用 RB-DELETE 将它从树中删除。结果的红黑树与初始的红黑树是否一样&#xff1f;证明你的答案。 文心一言&#xff1a; 首先&#xff0c;我们需要明确RB-INSERT和RB-DELETE的基本操…

“gradle project sync failed”

很久没打开AndroidStudio了&#xff0c;打开电脑发现这个软件都没了。重新安装后创建项目不成功&#xff0c;就提示了这个错误。 错误原因 “gradle project sync failed”&#xff1a;gradle没有配置成功。在安卓项目下找到目标文件&#xff1a;gradle --> wrapper -->…

机械设计-哈工大课程学习-螺旋传动

二、摩擦类型 1、静态摩擦&#xff1a;这是身体静止时所经历的摩擦。换句话说&#xff0c;就是身体有运动倾向时的摩擦力。 2、动态摩擦&#xff1a;这是身体在运动时所经历的摩擦。也称为动摩擦。动摩擦有以下两种类型&#xff1a; ①滑动摩擦&#xff1a;一个物体在另一个…

赛车游戏简单单车C语言版

#include<stdio.h> #include<easyx.h> #include<time.h>#define WIDTH 512 #define HEIGHT 768//定义一个汽车类 struct FCar {//坐标float x, y;// 汽车种类int type;//汽车速度float speed; };//定义全局变量 图片坐标 IMAGE BG_IMG; //背景图片坐标 float…

SV学习——数据类型(1)

文章目录 1. 内建数据类型2. 用户自定义3. 枚举类型 1. 内建数据类型 SV中引入新的数据类型logic&#xff0c;SV作为侧重于验证的语言&#xff0c;并不十分关切logic对应的逻辑应该被综合位寄存器还是线网&#xff0c;因为logic被使用的场景如果是验证环境&#xff0c;那么它只…

AI对比:ChatGPT与文心一言的异同与未来

文章目录 &#x1f4d1;前言一、ChatGPT和文心一言概述1.1 ChatGPT1.2 文心一言 二、ChatGPT和文心一言比较2.1 训练数据与知识储备2.2 语义理解与生成能力2.2 应用场景与商业化探索 三、未来展望3.1 模型规模与参数数量不断增加3.2 多模态交互成为主流3.3 知识图谱与大模型的结…

如何在 Ubuntu / Raspbian 上安装 MariaDB

Raspberry Pi OS&#xff08;原为Raspbian&#xff09;是为树莓派基于Debian开发的操作系统。 从2015年起&#xff0c;树莓派基金会正式将其作为树莓派的官方操作系统。 Raspbian是由Mike Thompson和Peter Green创建的一个独立项目。第一个版本于2012年6月发布&#xff0c;至…

Unity中实现捏脸系统

前言 目前市面上常见的捏脸一般是基于BlendShapes和控制骨骼点坐标两种方案实现的。后者能够控制的精细程度更高&#xff0c;同时使用BlendShapes来控制表情。 控制骨骼点坐标 比如找到控制鼻子的骨骼节点修改localScale缩放&#xff0c;调节鼻子大小。 BlendShapes控制表…

modelscope下载模型

# 私有模型下载&#xff0c;前提是您有响应模型权限 方法1 git lfs install git clone http://oauth2:your_git_tokenwww.modelscope.cn/<namespace>/<model-name>.git 如何获取git token 用您的账号登录https://www.modelscope.cn &#xff0c;在个人中心->访…

10本审稿及出版效率均较好的医学SCI期刊参数分享!

常笑医学整理了适合医务工作者进行论文投稿的医学SCI期刊&#xff0c; 审稿及出版效率均较好&#xff0c;附期刊详细参数&#xff0c;供大家参考。 1.CLINICAL CHEMISTRY AND LABORATORY MEDICINE&#xff08;临床化学与实验医学&#xff09; &#xff08;详细投稿信息请点击刊…