二叉树的三个简单题

news2024/11/14 13:26:46

1、二叉树的第k个结点 

 思路解析

由题可知这是一棵二叉搜索树

它或者是一棵空树,或者是具有下列性质的二叉树: 

1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 

2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 

3. 它的左、右子树也分别为二叉搜索树。

所以,当中序遍历这棵二叉搜索树的时候,结果为升序,本题求第k个最小的结点,也就是中序遍历第k次的结点,直接返回。

代码实现

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* ans;
    TreeNode* kthNode(TreeNode* root, int k) {
        //二叉搜索树中序遍历为有序
        dfs(root, k);
        return ans;
    }
    void dfs(TreeNode* root, int &k){
        if(!root) return;
        //中序遍历 每遍历一个结点就将k-1,k为0表示为第k小的结点
        dfs(root -> left, k);
        k --;
        if(!k) ans = root;
        if(k > 0) dfs(root -> right, k);
    }
};

2、二叉树的深度 

 思路解析

利用递归思想;二叉树的深度=左右子树的最大深度+1;

代码实现

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int treeDepth(TreeNode* root) {
        //如果当前节点为空结点返回0 否则返回左右子树的深度最大值+1;
        if(!root) return 0;
        return max(treeDepth(root -> left), treeDepth(root -> right)) + 1;
    }
};

3、平衡二叉树

 思路解析

计算左子树深度,右子树深度;如果每一对左右子树深度之差都不大于1,则返回真,否则为假。

代码实现

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool ans = true;
    bool isBalanced(TreeNode* root) {
        dfs(root);
        return ans;
    }
    int dfs(TreeNode* root){
        //求左子树和右子树的深度 当左右子树相差大于1 说明不是平衡二叉树 ans=false
        if(!root) return 0;
        int left = dfs(root -> left);
        int right = dfs(root -> right);
        if(abs(left - right) > 1) ans = false;
        return max(left, right) + 1;
    }
};

总结

今天做了几个二叉树的基础题,思路都能明白,但是细节上总会丢三落四,导致代码死循环等等,做这三个简单题复习了一下二叉搜索树、二叉平衡树的概念以及二叉树的深度递归算法,总之很有收获!希望大家喜欢。

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

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

相关文章

LSTM唐诗生成

LSTM唐诗生成 1课程简介1-2递归神经网络RNN1-3RNN网络细节1-4LSTM网络架构2-1处理Minist数据集2-2RNN网络模型及训练3-1任务概述与环境配置3-2参数配置3-3数据预处理模块3-4batch数据制作3-5RNN模型定义3-8测试唐诗生成效果 1课程简介 使用深度网络模型 写首歌 写个剧本等 原…

openshift node NotReady kubelet http: TLS handshake error

文章目录 问题现象解决方法 问题现象 openshift 集群 node 节点 notready $ oc get node NAME STATUS ROLES AGE VERSION master1.ocp4.demo.com Ready control-plane,master 4d14h v1.29.76abe8a1 master2.ocp4…

折腾 Quickwit,Rust 编写的分布式搜索引擎-官方教程

快速上手 在本快速入门指南中,我们将安装 Quickwit,创建一个索引,添加文档,最后执行搜索查询。本指南中使用的所有 Quickwit 命令都在 CLI 参考文档 中进行了记录。 https://quickwit.io/docs/main-branch/reference/cli 使用 Qui…

光庭信息半年报:营收利润「双」下降,汽车软件业务竞争加剧

「软件定义汽车」概念,不可否认强化了软件在整车价值的权重、带动更多供应商争夺软件业务的同时,也同样埋下了不小的风险。 比如,在汽车行业,常见的软件业务有两种:1、软件许可/IP,这类产品服务主要集中于…

MacOS 本地打开android模拟器

MacOS 本地打开android模拟器 查看本地安卓模拟器:emulator -list-avds 注意📢:这里会提示你找不到 emulator 命令,此时我们需要进入 cd ~/Library/Android/sdk/tools/ 查看模拟器列表:./emulator -list-avds 启动…

PHP概述-特点-应用领域-如何学习

老师建议注册使用百度文心一言;讯飞星火大模型-AI大语言模型-星火大模型-科大讯飞;Kimi.ai - 帮你看更大的世界 等人工智能工具软件的一个到两个,也可下载文心一言、讯飞星火、kimi等APP软件使用,对于我们在读的大二学生来说有什么…

需方软件供应链安全保障要求及开源场景对照自评表(上)

国标《信息安全技术 软件供应链安全要求》确立了软件供应链安全目标,规定了软件供应链安全风险管理要求和供需双方的组织管理和供应活动管理安全要求。 开源软件供应链作为软件供应链的一种特殊形式,该国标亦适用于指导开源软件供应链中的供需双方开展组…

BaseCTF [Week2] 最简单的编码

前言:做题笔记。 下载解压 查壳。 64ida打开。 查找字符串。 跟进。 逆着向前看。 说明是密文。 里面是base64的变异加密。 原base64关键加密: (看BaseCTF week1 [第一周]BasePlus 官方WP) 变种后: 在此基础上加上了…

安卓系统 XBL阶段详解

在安卓系统的启动流程中,XBL(eXtensible Boot Loader 或 Secondary Bootloader)是一个关键阶段,特别是在使用QualComm(高通)等SOC(System on Chip)的设备上。以下是对XBL阶段的详细解…

Yololov5+Pyqt5+Opencv 实时城市积水报警系统

在现代城市生活中,积水问题不仅影响交通和人们的日常生活,还可能对城市基础设施造成潜在的威胁。为了快速、准确地识别和应对积水问题,使用计算机视觉技术进行智能积水检测成为一个重要的解决方案。在这篇博客中,我将带你一步步实…

数据结构(邓俊辉)学习笔记】串 08——KMP算法:再改进

文章目录 1. 美中不足2. 以卵击石3. 前车之覆4. 后车之鉴5. 可视对比 1. 美中不足 以上,我们不仅给出了 KMP 算法,同时也证明它的时间复杂度已经达到了渐进意义上的最优,也就是最坏情况也不超过 O(n)。而该算法目前这个版本也绝非完美无缺&am…

005、架构_数据节点

​DN组件总览 ​ DN节点包含进程 dbagent进程:主要提供数据节点高可用、数据导入导出、数据备份恢复、事务一致性、运维类功能、集群的扩缩容、卸数等功能;MySQL进程:主要提供数据一致性、分组管理、快同步复制、高低水位等;

机械学习—零基础学习日志(如何理解概率论10)

数理统计 这里X为总体。x1,x2,x3为样本。具体的取值为样本值。 抽样分布 来一道习题: 回答: 上一道题解析: 《概率论与数理统计期末不挂科|考研零基础入门4小时完整版(王志超)》学习笔记 王志超老师 (UP…

一张图认识视频中间件

之前我们有介绍了很多关于视频中间件的技术资料: 超视网络视频中间件平台详解 视频中间件:海康E-home私有协议接入,并输出标准FLV/HLS/RTSP流 视频中间件:大华IPC/NVR 主动注册协议接入并输出标准FLV/RTSP/HLS流 视频中间件&#…

Meta AI动画生成功能的规模化部署与优化策略

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

SQL 注入之报错注入、延时注入、布尔盲注

在 SQL 注入攻击中,报错注入、延时注入和布尔盲注是常见的攻击手段。这些攻击方式利用了数据库系统在处理用户输入时的漏洞,从而获取敏感信息或者执行恶意操作。本文将详细介绍这三种 SQL 注入攻击方式的原理和实现方法。 一、报错注入 报错注入是利用…

【区块链 + 司法存证】易保全区块链电子数据存证保全系统 | FISCO BCOS应用案例

电子数据在司法领域存在诸多痛点,如数据存储成本高、安全性低;数据控制权分离带来的举证责任分配困难; 读取难度大、证据展示困难;数据独立、无法在司法机构间进行协同共享等。易保全首创“区块链 司法 应 用”的模式&#xff0…

如何提高OZON电商店铺的客户满意度

以下是提高 OZON 电商店铺客户满意度的方法: 一、产品质量与描述相符 严格选品把控:花费 1-2 小时深入研究供应商和产品质量。在选择产品时,要与可靠的供应商合作,确保产品的质量稳定。例如,对于电子产品&#xff0c…

第二证券:股指预计保持震荡格局 关注消费电子、汽车等板块

2024年1—7月,全国一般公共预算收入135663亿元,同比下降2.6%,扣除上一年同期中小微企业缓税入库抬高基数、上一年年中出台的减税政策翘尾减收等特殊因素影响后,可比添加1.2%左右。综合考虑超长时间特别国债年内相对滑润发行、8月份…

【素数】在奇数中找素数并按每行10个数打印输出

100-200间的素数,按每行10个数打印输出。要求在奇数中找素数。 素数是一个大于1的自然数,它只能被1和它本身整除,不能被其他自然数整除。换句话说,素数是只有两个正因数(1和它本身)的自然数。 奇数是指不能…