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

目录

结构体声明:

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.mzph.cn/news/769582.shtml

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

相关文章

YOLOv9改进策略:卷积魔改 | SCConv:空间和通道重建卷积,即插即用,助力检测 | CVPR2023

💡💡💡本文改进内容: CVPR2023 SCConv 由两个单元组成:空间重建单元(SRU)和通道重建单元(CRU)。 SRU利用分离重建方法来抑制空间冗余,而CRU使用分割-变换-融…

Linux文件系列:磁盘,文件系统,软硬链接

Linux文件系列:磁盘,文件系统,软硬链接 一.磁盘相关知识1.磁盘机械构成2.磁盘物理存储3.磁盘逻辑存储1.LBA地址2.磁盘的分区和分组 二.文件系统和inode1.inode结构体2.文件系统1.Super Block(超级块)2.Group Descriptor Table(块组描述表GDT)3.inode Table4.Data Blocks5.Block…

mysql面试,事务四大特性,mvcc版本控制,3个重要日志,索引结构,索引失效,innodb引擎执行流程,主从复制,锁,page页

大纲 事务4大特性 https://blog.csdn.net/king_zzzzz/article/details/136699546 Mvcc多版本控制 https://blog.csdn.net/king_zzzzz/article/details/136699546 3个重要日志 https://blog.csdn.net/king_zzzzz/article/details/136868343 索引 mysql 索引(…

使用Docker搭建Logstash

使用Docker搭建Logstash Logstash是一个开源的服务器端数据处理管道,它能够接收来自多个来源的数据,转换数据,然后将数据发送到您指定的目的地。使用Docker搭建Logstash是一个简单、高效的方式。本教程将分别介绍如何通过Docker CLI和Docker…

家用智能洗地机哪个牌子好?4款型号让你解锁高效省力生活体验

在今天的社会中,随着生活节奏的加快,人们对于家庭清洁的需求不断增加。传统的清洁方法已经无法满足现代家庭的需求。因此,洗地机作为一种高效、方便的清洁工具,已经成为了许多家庭首选的清洁设备。然而,在市场上&#…

富格林:出金不顺谨防虚假受害

富格林悉知,做投资有盈有亏是正常的,投资者需要做的是尽可能降低亏损的风险,警惕虚假出金陷阱,避免造成不必要的亏损。在进入黄金投资市场之前,投资者需学习一定的投资技巧,并且需要采取正规的策略来打击和…

RSTP、MSTP、VRRP

RSTP协议原理与配置 问题一、STP的收敛延时(30秒(有BP端口情况下RP端口down)或者50秒(没有BP端口情况下RP端口down)) RSTP:Rapid Spanning Tree Protocol RSTP和STP从原理流程上一样&#xf…

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

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

Myelsa的Python算法之旅(高铁直达)

博客个人主页(非风V非雨): https://blog.csdn.net/ygb_1024?spm1010.2135.3001.5421 Python-VBA编程500例算法清单(持续更新中) Myelsa的Python算法之旅创作清单算法明细对应网址博客个人主页(非风V非雨)非风V非雨-CSDN博客Myelsa的Python算法之旅(高…

【晴问算法】入门篇—字符串处理—连续相同字符统计

题目描述 给定一个字符串,统计其中连续出现的相同字符个数。输入描述 一个非空字符串(长度不超过100,仅由小写字母组成)输出描述 按从左到右字符出现的顺序,输出每个字符连续出现的个数。 其中每个字符输出一行,每行以空格为分隔&…

AD实用设置教程

目录 一、“多边形敷铜” 设置 “最小间隔” 二、放置的 “过孔” 敷铜 “全连接”

QT 信号(Signal)与槽(Slot)机制

一、信号(signal)与槽(slot) 在QT中,信号(signal)与槽(slot)机制是一种用于对象间通信的重要机制。它允许一个对象发出信号,而其他对象可以通过连接到该信号…

一文读懂OLAP常用优化技术

概述 OLAP在推动企业数字化转型、提高决策分析效率等场景占了举足轻重的作用。市场上数仓选型非常多,升级后往往也越来越像。因为OLAP底层技术有很多共通之处,本文将揭秘其中一些常用的技术手段。期望能帮助读者更好地进行技术选型和数仓设计。 笔者将…

敏捷开发——第二次作业JS/服务器的部署

部署 Web 服务器 1. 安装 Apache HTTP 服务器并部署静态网页应用 ⭐⭐ 默认情况下,Apache 在 /var/www/html 目录下寻找要提供服务的文件。可以将静态网页文件放置在这个目录下 2.安装 Nginx 并部署静态页面应用 3. 实践部分 1. 2. 3. 在 /var/www/html 目录下…

离职谷歌的Transformer作者创业,连发3个模型(附技术报告)

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 更多资源欢迎关注 去年 8 月,两位著名的前谷歌研究人员 David Ha、Llion Jones 宣布…

websocket 内的操作码fin和opcode

websocket传输的头两个字节非常关键,提供了每一帧的基本信息,RFT6455中给出了帧头的格式说明: 0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1-----------…

【协议-HTTPS】

https https是在http协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。 httpshttp加密认证完整性保护 https交互图: HTTPS的整体过程分为证书验证和数据传输阶段: ① 证书验证阶段 浏览器发起 HTTPS 请求 服务…

近线数仓优化改造

近线数仓优化改造 1. 背景2. 优化3. 改造3.1. 重构3.2. 优化 1. 背景 大概就是有那么一个数仓,然后简略结构如下: #mermaid-svg-PVoUzuQhj2BK7Qge {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid…

【javascript】原型继承

在编程中,我们经常会想获取并扩展一些东西。 例如,我们有一个 user 对象及其属性和方法,并希望将 admin 和 guest 作为基于 user 稍加修改的变体。我们想重用 user 中的内容,而不是复制/重新实现它的方法,而只是在其之…

SQL server 里按年按月进行累计值统计

SQL server 里按年按月进行累计值统计 即 4月 算从1~4月的累计值 参考如下: select dt, account_set_ord, account_set_title, account_ord, account_title,…