链式二叉树经典OJ题目(一)

news2024/11/14 16:36:06

目录

结构体声明:

1.单值二叉树

题目描述:

思路分析:

源码:

2.二叉树最大深度

题目描述:

思路分析:

源码:

3.检查两棵树是否相同

题目描述:

思路分析:

源码:

4.对称二叉树

题目描述:

思路分析:

源码:


结构体声明:

typedef char BTDataType;
typedef struct BinaryTreeNode
{
	BTDataType val;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}BTNode;

1.单值二叉树

题目描述:

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false

思路分析:

设计条件:下一个子树的数值等于上一个字数的数值,单一子树要求每一个子树数值相等,在设计的时候要考虑数值的传参

判断条件设计:当子树等于空的时候,说明前边遍历的数组没有问题,返回true,如果下一个子树的数值跟这个子树的数值不一样,说明不是单值子树,返回false
成立条件设计:当子树的左子树和右子树都是单值子树的时候,就是单值二叉树

源码:

bool _isUnivalTree(BTNode* root, int val)
{
    if (root == NULL)
    {
        return true;
    }
    if (root->val != val)
    {
        return false;
    }
    return _isUnivalTree(root->left, val)
        && _isUnivalTree(root->right, val);
}
bool isUnivalTree(BTNode* root) 
{
    if (root == NULL)
    {
        return true;
    }
    int val = root->val;
    return _isUnivalTree(root, val);
}

2.二叉树最大深度

题目描述:

给定一个二叉树 root ,返回其最大深度。

二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。

思路分析:

设计条件:寻找二叉树最大深度,不断变换左右子树路径,找到最大深度的内条路径。
判断条件设计:当子树为空的时候,说明此时子树后不再有字数了,直接返回0。

成立条件设计:当递归至最后一层,说明此时链式二叉树递归至最大深度,向前返回计算深度。

源码:

int maxDepth(BTNode* root)
{
    if (root == NULL)
    {
        return 0;
    }
    int left = maxDepth(root->left);
    int right = maxDepth(root->right);
    return left > right ? left + 1 : right + 1;
}

3.检查两棵树是否相同

题目描述:

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

思路分析:

设计条件:分别判断两个树的各个节点是否相同,不断递归节点的左子节点和右子节点。
判断条件设计:两棵树同时递归到NULL,返回true;一个树递归到NULL,另一个数没有递归到NULL,返回false;再继续递归两个树的左子树和右子树。

成立条件设计:两棵树递归至最后一层还没有返回false。

源码:

bool isSameTree(BTNode* p, BTNode* q)
{
   if (p == NULL && q == NULL)
   {
       return true;
   }
   if (p == NULL && q != NULL)
   {
       return false;
   }  
   if (q == NULL && p != NULL)
   {
       return false;
   }
   return isSameTree(p->left, q->left);
   return isSameTree(p->right, q->right);
}

4.对称二叉树

题目描述:

给你一个二叉树的根节点 root , 检查它是否轴对称。

思路分析:

设计条件:将一个树分解成两个树,按照检查两棵树是否相同的逻辑递归链式二叉树
判断条件设计:两棵树同时递归到NULL,返回true;一个树递归到NULL,另一个数没有递归到NULL,返回false;再继续递归两个树的左子树和右子树。

成立条件设计:两棵树递归至最后一层还没有返回false。

源码:

bool checkNode(BTNode* p, BTNode* q)
{
    if (p == NULL && q == NULL)
    {
        return true;
    } 
    if (p == NULL && q != NULL)
    {
        return false;
    } 
    if (p != NULL && q == NULL)
    {
        return false;
    }
    return checkNode(p->left, q->right);
    return checkNode(q->left, p->right);
}
bool isSymmetric(BTNode* root)
{
    return checkNode(root, root);
}

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

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

相关文章

EMC | 浪涌保护电路NTC

NTC(5D-11)负温度系数热敏电阻。 NTC是过流器件。 抑制开机的浪涌电流,NTC温度越高,电阻越低。 如果没有NTC,220VAC开机对电容CE3充电,此时电容中没有电荷,CE3相当于短路,回路电流会很大。 选型注意 1、R25温度下电阻…

Negative Sampling with Adaptive DenoisingMixup for Knowledge Graph Embedding

摘要 知识图嵌入(Knowledge graph embedding, KGE)的目的是通过对比正负三元组,将知识图中的实体和关系映射到一个低维、密集的向量空间中。在kge的训练过程中,由于kge只包含正三元组,因此负采样对于找到高质量的负三元组至关重要。大多数现…

鸿蒙NXET实战:高德地图定位SDK【获取Key+获取定位数据】(二)

如何申请key 1、创建新应用 进入[控制台],创建一个新应用。如果您之前已经创建过应用,可直接跳过这个步骤。 2、添加新Key 在创建的应用上点击"添加新Key"按钮,在弹出的对话框中,依次:输入应用名名称&…

04、JS实现:用⼆分法思想实现搜索旋转排序数组(一步一步剖析,很详细)

搜索旋转排序数组 Ⅰ、搜索旋转排序数组:1、题目描述:2、解题思路:3、实现代码: Ⅱ、小结: Ⅰ、搜索旋转排序数组: 1、题目描述: 给你⼀个升序排列的整数数组 nums ,和⼀个整数 tar…

【刷题】滑动窗口精通 — Leetcode 30. 串联所有单词的子串 | Leetcode 76. 最小覆盖子串

送给大家一句话: 充满着欢乐与斗争精神的人们,永远带着欢乐,欢迎雷霆与阳光。 —— 赫胥黎 滑动窗口精通 前言Leetcode 30. 串联所有单词的子串题目描述算法思路 Leetcode 76. 最小覆盖子串题目描述算法思路 Thanks♪(・ω&#xf…

产品推荐 | 基于 Zynq UltraScale+ XCZU27DR的 FACE-RFSoC-C高性能自适应射频开发平台

一、产品概述 FACE-RFSOC-C自适应射频开发平台,是FACE系列新一代的产品。 平台搭载有16nm工艺的Zynq UltraScale™ RFSoC系列主器件。该器件集成数千兆采样RF数据转换器和ARM Cortex-A53处理子系统和UltraScale可编程逻辑,是一款单芯片自适应射频平台。…

风力发电模型Windpowerlib概述与入门

Windpowerlib 是一个提供了一系列函数和类的库,用于计算风力涡轮机的功率输出。它最初是 feedinlib(风能和光伏)的一部分,但后来被分离出来,以建立一个专注于风能模型的社区。 这个库的主要目的是简化风力涡轮机的能量…

Vue3 + Vite + TS + Element-Plus + Pinia项目(3)--新建路由

1、在src文件夹下新建router文件夹后,创建index.ts文件 2、具体如下 import { createRouter, createWebHashHistory } from vue-routerconst router createRouter({history: createWebHashHistory(),routes: [{path: "/index",component: () > impor…

红黑树进阶:正向与反向迭代器的实现及map、set的封装实践

文章目录 一、引言二、红黑树迭代器设计1、迭代器的基本概念和分类2、正向迭代器设计a.迭代器结构定义b.迭代器的 与 -- 3、反向迭代器设计a.反向迭代器的必要性b.反向迭代器的实现要点 4、红黑树封装迭代器 三、使用红黑树实现Map四、红黑树实现Set五、细节理解1、 typname的使…

JAVA学习笔记19(面向对象编程)

1.面向对象编程 1.1 类与对象 1.类与对象的概念 ​ *对象[属性]/[行为] ​ *语法 class cat {String name;int age; }main() {//cat1就是一个对象//创建一只猫Cat cat1 new Cat();//给猫的属性赋值cat1.name "123";cat1.age 10; }​ *类是抽象的,…

【Redis系列】那有序集合为什么要同时使用字典和跳跃表

面试官:听说你精通Redis,那我就考考你吧 面试官:不用慌尽管说,错了也没关系😊。。。 以【面试官面试】的形式来分享技术,本期是《Redis系列》,感兴趣就关注我吧❤️ 面试官:你说说Re…

个人可以做知识付费网站吗

个人可以做知识付费网站吗 个人能够做学问付费网站吗?答案是肯定的!如今个人做学问付费网站并不需求太多的资金和技术支持,我们只需求购置一台效劳器或虚拟主机,然后在该主机空间上搭建一个WordPress网站,最后运用带有…

商家如何自己零成本免费制作点餐小程序项目完整源码

现在点餐小程序成为餐饮店的标配,顾客只要扫码,即可进入小程序点餐。顾客付款后,后厨自动打印出订单并开始制作。整个过程非常方便流畅,甚至还可以免去收银(或服务)人员。那么,这种餐饮小程序要…

类和对象三部曲(one)

都说C语言是面向过程,分析出求解问题的步骤,通过函数调用来逐步解决问题。 拿洗衣服来举例,C关注的是一个过程: 那么C是什么呢? 面向对象的编程语言。 面向对象对象指什么? 象棋里的对象么?…

JavaScript学习第二天

1.学习JavaScript高级语法目的 降低后续对于前端框架学习难度 1.局部变量与全局变量 1.局部变量: 在函数体内部通过var声明的变量 1.局部变量特点: 局部变量只能在当前函数体内使用,不能 在函数体外使用 2.全局变量 在script标签下直接…

AI之Suno:Suno V3的简介、安装和使用方法、案例应用之详细攻略

AI之Suno:Suno V3的简介、安装和使用方法、案例应用之详细攻略 目录 Suno AI的简介 1、特点与改进: Suno AI的安装和使用方法 1、第一步,让国产大模型—ChatGLM4帮我写一个提示词 2、第二步,将提示词交给Suno v3,…

LDL^H分解求逆矩阵与MATLAB仿真(Right-Looking)

通过分解将对称正定厄米特矩阵分解成下三角矩阵L和对角矩阵D来求其逆矩阵 目录 前言 一、LDL^H基本算法 二、LDL^H Right-Looking算法 三、D矩阵求逆 四、L矩阵求逆 五、A矩阵求逆 六、计算量分析 七、MATLAB仿真 八、参考资料 总结 前言 在线性代数中,LDL…

如何在Ubuntu系统使用Docker搭建MongoDB结合内网穿透实现公网连接

文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署Mon…

企业如何选择一个开源「好」项目?

开源 三句半​​​​​​​ 需求明确是关键 风险考量要周全 开源虽好不白捡 别忘合规! 显然,开源已成为一股不可阻挡的洪流,企业拥抱开源,积极参与开源项目不仅是响应技术潮流的必然选择,更是实现自身技术创新、市场拓…

GETSHELL方法总结上

渗透的总步骤 1.信息收集找到弱漏洞 2.漏洞挖掘 漏洞验证 3.有一定权限 getshell 4.提权后---渗透 5.内网渗透】 前后台拿shell方法汇总 接下来我们实操一波dedecms也就是织梦cms 如果你们的靶场是空白的 可能是php版本 我们修改为5.2 可能是源码问题 我们不要急着上传…