LeetCode二叉树的相关题目

news2024/10/6 16:16:47

110. 平衡二叉树

方法:递归

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
    int getDep(TreeNode* cur) {
        if (cur == NULL) return 0;
        int l = getDep(cur->left);
        if (l == -1) return -1;
        int r = getDep(cur->right);
        if (r == -1) return -1;
        return abs(l-r) > 1 ? -1 : max(l, r) + 1;
    }
public:
    bool isBalanced(TreeNode* root) {
        if (getDep(root) == -1) return false;
        return true;
    }
};

$时间复杂度O(n),空间复杂度O(n)

257. 二叉树的所有路径

方法:递归

private:
    void solve(TreeNode* cur, string path, vector<string>& res) {
        path += to_string(cur->val);
        if (!cur->left && !cur->right) {
            res.push_back(path);
            return ;
        }

        if (cur->left) solve(cur->left, path + "->", res);
        if (cur->right) solve(cur->right, path + "->", res);
    }
public:
    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> res;
        string path;
        solve(root, path, res);
        return res;
    }
};

$时间复杂度O(n^{2}),空间复杂度O(n^{2})

方法:迭代

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<string> binaryTreePaths(TreeNode* root) {
        stack<TreeNode*> nod;
        stack<string> str;
        vector<string> res;
        if (root == NULL) return res;
        nod.push(root);
        str.push(to_string(root->val));
        while(!nod.empty()) {
            TreeNode* cur = nod.top(); nod.pop();
            string path = str.top(); str.pop();
            if (cur->left == NULL && cur->right == NULL) {
                res.emplace_back(path);
            }

            if (cur->right) {
                nod.push(cur->right);
                str.push(path + "->" + to_string(cur->right->val));
            }
            if (cur->left) {
                nod.push(cur->left);
                str.push(path + "->" + to_string(cur->left->val));
            }
        }
        return res;
    }
};

$时间复杂度O(n^{2}),空间复杂度O(n^{2})

404. 左叶子之和

方法:递归

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int sumOfLeftLeaves(TreeNode* root) {
        if (root == NULL) return 0;
        int l = sumOfLeftLeaves(root->left);
        int r = sumOfLeftLeaves(root->right);

        int midv = 0;
        if (root->left && !root->left->left && !root->left->right) midv += root->left->val;

        int res = l + r + midv;
        return res;
    }
};

$时间复杂度O(n),空间复杂度O(n)

方法:迭代

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int sumOfLeftLeaves(TreeNode* root) {
        stack<TreeNode*> stk;
        if (root != NULL) stk.push(root);
        int res = 0;
        while (!stk.empty()) {
            TreeNode* nod = stk.top(); stk.pop();
            if (nod->left != NULL && !nod->left->left && !nod->left->right) res += nod->left->val;

            if (nod->right) stk.push(nod->right);
            if (nod->left) stk.push(nod->left);
        }
        return res;
    }
};

$时间复杂度O(n),空间复杂度O(n)

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

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

相关文章

漫谈大数据 - HiveSQL总结(一)库表操作

导语&#xff1a;针对hive各种数据库操作&#xff0c;内部表、外部表、分区表、分桶表的表属性查看修改操作以及hive数据的导入与导出详解。 hive简介&#xff1a; hive是基于Hadoop的一个数据仓库工具&#xff0c;用来进行数据提取、转化、加载&#xff0c;这是一种可以存储、…

双系统安装Windowslinux

文章目录 1.1 联想小新windows10重装1.2 宏基暗影骑士windows10重装2.1 ubuntu18.04重装1&#xff09;清理空间并制作U盘启动2&#xff09;ubuntu分区 3.1 ros安装4.1 deb包安装5.1 网络设置6.1 VSCode环境配置 1.1 联想小新windows10重装 bioss设置 ①微软官网制作u盘启动 ②…

微信小程序PHP+python+nodejs+springboot+vue 电影院订票选座系统

管理员的主要功能有&#xff1a; 1.管理员输入账户登陆后台 2.个人中心&#xff1a;管理员修改密码和账户信息 3.会员管理&#xff1a;对注册的会员信息进行删除&#xff0c;查询&#xff0c;添加&#xff0c;修改 4.电影分类管理&#xff1a;对电影的分类信息进行添加&#xf…

python+nodejs+springboot+vue 教学师生互动答疑系统

然后遵循软件常规开发流程&#xff0c;首先针对系统选取适用的语言和开发平台&#xff0c;根据需求分析制定模块并设计数据库结构&#xff0c;再根据系统总体功能模块的设计绘制系统的功能模块图&#xff0c;流程图以及E-R图。然后&#xff0c;设计框架并根据设计的框架编写代码…

浅学WebFlux--构建一个响应式的SpringBoot服务

前言 看惯了SpringMVC&#xff0c;最近在闲来之余抽空了解了一下Spring早已发布并支持的一种新web框架-WebFlux。由于这玩意的使用需要具备的基础是Reactive programming 的理解、Reactor 的基础以及熟练的java8 lambda使用。但是并不影响笔者摸着石头过河……在此做个浅学笔记…

【三十天精通Vue 3】第十二天 Vue 3 过滤器详解(已废弃)

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 过滤器概述1.1 过滤器的简介1.2 过滤器的作用1.3 过…

创建Vue3.0工程

1.使用 vue-cli 创建 官方文档&#xff1a;创建一个项目 | Vue CLI (vuejs.org) ## 查看vue/cli版本&#xff0c;确保vue/cli版本在4.5.0以上 vue --version ## 安装或者升级你的vue/cli npm install -g vue/cli ## 创建 vue create vue_test ## 启动 cd vue_test npm run se…

7年时间,从功能测试到测试开发月薪30K,有志者事竟成

突破自己的技术瓶颈并不是一蹴而就&#xff0c;还是需要看清楚一些东西&#xff0c;这里也有一些经验和见解跟大家分享一下。同样是职场人士&#xff0c;我也有我的经历和故事。在工作期间&#xff0c;我有过2年加薪5次的小小“战绩”&#xff08;同期进入公司的员工&#xff0…

番外12:ADS导出到AD变为PCB文件

番外12&#xff1a;ADS导出到AD变为PCB文件并嘉立创制板 番外12&#xff1a;ADS导出到AD变为PCB文件&#xff0c;此处的示例为功率放大器&#xff01; STEP 1: 从ADS导出dxf文件 打开制作好的版图文件&#xff0c;在原有基础上打好散热孔和固定孔&#xff0c;散热孔半径0.63…

PCB阻焊桥存在的DFM(可制造性)问题,华秋一文告诉你

PCB表面的一层漆&#xff0c;称为阻焊油墨&#xff0c;也就是PCB线路板阻焊油墨。阻焊油墨是PCB线路板中非常常见、也是主要使用的油墨&#xff0c;一般90%都是绿色&#xff0c;但也有杂色油墨&#xff1a;红色、蓝色、黑色、白色、黄色等。 阻焊油墨的作用就是绝缘&#xff0…

反射:替对象执行方法

反射&#xff0c;可不只是利用Class创建对象哟&#xff0c;更重要是替对象执行方法&#xff01;关于反射创建对象&#xff0c;它可以提供一种通用的机制&#xff0c;对任意Class对象得到它的实例&#xff0c;而不需要import。 举个例子&#xff0c;Spring底层就是利用反射为我…

各种文字生成图片的AIGC模型(openAI、谷歌、stable、Midjourney等)

1 前言 AIGC&#xff0c;全名“AI generated content”&#xff0c;又称生成式AI&#xff0c;意为人工智能生成内容。例如AI文本续写&#xff0c;文字转图像的AI图、视频等。 本文主要描述文字生成图片的模型。而且目前扩散模型&#xff08;Diffusion Models&#xff09;流行…

CANoe使用记录(一):新建Canoe工程

目录 1、概述 2、新建工程 2.1、新建工程界面 2.2、查看License 2.3、添加DBC文件 2.4、测量窗口 2.5、通道用量 2.6、通道匹配 2.7、硬件通道配置 2.8、状态监控 1、概述 Canoe是德国Vector公司推出的一款总线开发设备&#xff0c;主要用于总线类的开发、仿真、测试…

【Python】【进阶篇】二十六、Python爬虫的Scrapy爬虫框架

目录 二十六、Python爬虫的Scrapy爬虫框架26.1 Scrapy下载安装26.2 创建Scrapy爬虫项目1) 创建第一个Scrapy爬虫项目 26.3 Scrapy爬虫工作流程26.4 settings配置文件 二十六、Python爬虫的Scrapy爬虫框架 Scrapy 是一个基于 Twisted 实现的异步处理爬虫框架&#xff0c;该框架…

【Java 数据结构】单链表经典面试题 (动图解析)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

Redis问题

一、认识Redis 1. 什么是 Redis&#xff1f; Redis 是一种基于内存的数据库&#xff0c;对数据的读写操作都是在内存中完成&#xff0c;因此读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列、分布式锁等场景。Redis 提供了多种数据类型来支持不同的业务场景&#…

vue-seamless-scroll无缝滚动组件使用方法详解+解决轮播空白缝隙问题(最后面)

下载安装 1.npm npm install vue-seamless-scroll --save 2.yarn yarn add vue-seamless-scroll 使用 1、全局注册 import Vue from vue import scroll from vue-seamless-scroll Vue.use(scroll) //或者 //Vue.use(scroll,{componentName: scroll-seamless}) 2、局部注册 im…

刘强东的“百亿补贴” 被指“雷”声大雨点小

京东集团2022年财报显示&#xff0c;2022年第四季度京东收入为2954亿元&#xff0c;同比增加7.1%&#xff0c;与2021年四季度23%的同比增速确有不小的差距。前三季度对应的同比增速分别为17.95%、5.44%和11.35%&#xff0c;与2021年相比均有回落。从财报中可以看出&#xff0c;…

什么是Selenium?使用Selenium进行自动化测试

什么是 Selenium&#xff1f; Selenium 是一种开源工具&#xff0c;用于在 Web 浏览器上执行自动化测试&#xff08;使用任何 Web 浏览器进行 Web 应用程序测试&#xff09;。   等等&#xff0c;先别激动&#xff0c;让我再次重申一下&#xff0c;Selenium 仅可以测试Web应用…

Unity VFX -- (2)玩一玩粒子系统

增加火花 复杂的VFX通常是由多个单独的粒子系统所组成。当它们组合到一起时&#xff0c;这些独立的个体会产生出更加有趣的效果。下面我们来为火焰增加火花效果。 1. 在Hierarchy中&#xff0c;展开Fire_ParticleSystem_Prefab物体&#xff0c;选择VFX_Sparks子物体。 2. 激活V…