想要精通算法和SQL的成长之路 - 二叉树的判断问题(子树判断 | 对称性 | 一致性判断)

想要精通算法和SQL的成长之路 - 二叉树的判断问题

  • 前言
  • 一. 相同的树
  • 二. 对称二叉树
  • 三. 判断子树

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 相同的树

原题链接
在这里插入图片描述

这题目典型的递归题:

  • 如果两个节点都是null,我们返回true
  • 如果两个节点一个null,一个非空,返回false
  • 最后满足条件:当前两个节点值相等,并且两个节点的左子树相等,右子树也相等。

代码如下:

public boolean isSameTree(TreeNode p, TreeNode q) {if (p == null && q == null) {return true;}if (p == null || q == null) {return false;}return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}

二. 对称二叉树

原题链接
在这里插入图片描述
这个题目,我们依旧使用递归算法。我们可以在第一题的基础上,做一个改变。
一致性代码:

return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);

对称代码:

return p.val == q.val && isSameTree(p.left, q.right) && isSameTree(p.right, q.left);

最终完整代码如下:

public boolean isSymmetric(TreeNode root) {return helper(root.left, root.right);
}public boolean helper(TreeNode p, TreeNode q) {if (p == null && q == null) {return true;}if (p == null || q == null) {return false;}return p.val == q.val && helper(p.left, q.right) && helper(p.right, q.left);
}

三. 判断子树

原题链接
在这里插入图片描述
此题依旧是第一题的一个进阶版,判断B是否是A的子树可以等同于:

  • AB 是否相同?
  • A.leftB 是否相同?
  • A.rightB 是否相同?
  • 以此类推…

那么在第一题的基础上,我们有了函数去判断两棵树是否相等,我们只需要完成上面的判断即可:

public boolean isSubtree(TreeNode root, TreeNode subRoot) {// 特判:root肯定不能为nullif (root == null) {return false;}// 特判:subRoot子树允许为nullif (subRoot == null) {return true;}return isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot) || isSameTree(root, subRoot);
}public boolean isSameTree(TreeNode p, TreeNode q) {if (p == null && q == null) {return true;}if (p == null || q == null) {return false;}if (p.val != q.val) {return false;}return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}

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

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

相关文章

【Leetcode】滑动窗口合集

这里写目录标题 209.长度最小的子数组题目思路代码 3. 无重复字符的最长子串(medium)题目思路 11. 最大连续 1 的个数 III题目思路 1658. 将 x 减到 0 的最⼩操作数题目思路代码 904. 水果成篮题目思路代码 438.找到字符串中所有字母的异位词题目思路代码…

python二次开发CATIA:文字轮廓草图

CATIA V5 版本的草图中,并没有文字轮廓的创建命令。通常的做法是,再Drawing 文件中创建所需文本-->将 Drawing 文件另存为 dwg / dxf 格式-->打开另存的文件,文字已转为轮廓线条-->复制线条并粘贴到草图中。 本例中,基于…

C#餐饮收银系统

一、引言 餐饮收银系统是一种用于管理餐馆、咖啡厅、快餐店等餐饮业务的计算机化工具。它旨在简化点餐、结账、库存管理等任务,提高运营效率,增强客户体验,同时提供准确的财务记录。C# 餐饮收银系统是一种使用C#编程语言开发的餐饮业务管理软…

java飞机大战

一、 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅、游戏方式简单,玩起来易于上手的桌面游戏。该飞机大战项目运用的主要技术即是Swing编程中的一些窗口类库、事件监听以及贴图技术。 1…

【Java】多态

概念 多态 是面向对象三大特征之一。 同一个对象,在不同的时刻表现出来的不同形态。 举例:狗 狗就是狗 狗 dog new 狗(); 我们也可以说 动物 animal new 狗(); 这里狗在不…

【MySQL教程】| (1-1) 2023MySQL-8.1.0 安装教程

文章目录 一、安装包下载二、安装配置1、解压安装包2、编写MySQL配置文件3、初始化MySQL数据库3、安装mysql服务并启动4、MySQL服务5、连接MySQL6、修改密码 三、配置环境变量四、防止mysql自启动拖慢开机时间 近日有粉丝问到mysql在win11的安装中遇到一些问题,应粉…

智慧工地源代码 SaaS模式云平台

伴随着技术的不断发展,信息化手段、移动技术、智能穿戴及工具在工程施工阶段的应用不断提升,智慧工地概念应运而生,庞大的建设规模催生着智慧工地的探索和研发。 什么是智慧工地? 伴随着技术的不断发展,信息化手段、移…

C/C++学习 -- 分组加密算法(DES算法)

数据加密标准(Data Encryption Standard,DES)是一种对称密钥加密算法,是信息安全领域的经典之作。本文将深入探讨DES算法的概述、特点、原理,以及提供C语言和C语言实现DES算法的代码案例。 一、DES算法概述 DES算法是…

数据库存储引擎和数据类型详细介绍

目录 一、数据库存储引擎(了解)1.了解MySQL体系结构2.存储引擎(了解)2.1.存储引擎的介绍2.2.存储引擎分类2.3.如何选择引擎? 3.事务控制语言(TCL)事务的四个特性(ACID) 二、数据类型(了解)1.整型…

JavaScript系列从入门到精通系列第十二篇:JavaScript中对象的简介和对象的基本操作以及JavaScript中的属性值和属性名

文章目录 前言 一:对象分类 1:内建对象 2:宿主对象 3:自建对象 二:对象的基本操作 1:创建对象 2:向对象中添加属性 3:读取对象中的属性 4:修改对象中的属性 三…

《幸福之路》罗素(读书笔记)

目录 作者简介 作者的感悟 经典摘录 一、不幸福的成因 1、一部分要归咎于社会制度 2、一部分则得归咎于个人心理——当然,你可以说个人心理是社会制度的产物。 二、欠缺某些想要的东西,是快乐的必要条件 三、无聊与刺激 四、现代人的精神疲劳 五…

FFmpeg 命令:从入门到精通 | ffplay 播放控制选项

FFmpeg 命令:从入门到精通 | ffplay 播放控制选项 FFmpeg 命令:从入门到精通 | ffplay 播放控制选项选项表格图片 FFmpeg 命令:从入门到精通 | ffplay 播放控制选项 选项表格 项目说明Q,Esc退出播放F,鼠标左键双击全…