news 2026/9/20 19:40:06

【算法日记】二叉树:判断相同树和子树,翻转二叉树,平衡二叉树,对称二叉树

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【算法日记】二叉树:判断相同树和子树,翻转二叉树,平衡二叉树,对称二叉树

文章目录

  • 1. 判断相同的树(LC100)
    • 题目描述
    • 解题思路
    • 代码示例
  • 2. 另一棵树的子树(LC572)
    • 题目描述
    • 解题思路
    • 代码示例
  • 3. 翻转二叉树(LC226)
    • 题目描述
    • 解题思路
    • 代码示例
  • 4. 平衡二叉树(LC110)
    • 题目描述
    • 解题思路
    • 代码示例
    • 优化(时间复杂度O(n))
  • 5. 对称二叉树(LC101)
    • 题目描述
    • 解题思路
    • 代码示例

1. 判断相同的树(LC100)

判断相同的树

题目描述

解题思路

  1. 先判断结构,如果不是都为空或者都为非空,返回false
  2. 如果结构相同且不为空,则判断数值是否相等,不等则返回false
  3. 如果结构相等且为空,返回true
  4. 当前节点判断完后,判断左子树和右子树是否相等

代码示例

classSolution{publicbooleanisSameTree(TreeNodep,TreeNodeq){//判断结构if(!(p==null&&q==null||p!=null&&q!=null))returnfalse;//判断数值if(p!=null&&(p.val!=q.val))returnfalse;elseif(p==null)returntrue;returnisSameTree(p.left,q.left)&&isSameTree(p.right,q.right);}}

2. 另一棵树的子树(LC572)

另一棵树的子树

题目描述

解题思路

  1. 检查是否为子树就是检查root中是否有子树与subtree相同,可以借用前一个题的方法。
  2. 如果根节点为空,返回false
  3. 如果当前根节点以下的树与subtree相等,则返回true
  4. 接着检查根节点的左子树或右子树是否与subtree相等

代码示例

publicbooleanisSubtree(TreeNoderoot,TreeNodesubRoot){if(root==null)returnfalse;if(isSameTree(root,subRoot))returntrue;returnisSubtree(root.left,subRoot)||isSubtree(root.right,subRoot);}

3. 翻转二叉树(LC226)

翻转二叉树

题目描述

解题思路

如果root为空,返回空;利用前序遍历,先交换根节点的左右节点,再调用本身分别交换左右两个子树的节点,返回root

代码示例

publicTreeNodeinvertTree(TreeNoderoot){if(root==null)returnnull;TreeNodetmp=root.left;root.left=root.right;root.right=tmp;invertTree(root.left);invertTree(root.right);returnroot;}

4. 平衡二叉树(LC110)

平衡二叉树

题目描述

解题思路

先求长度,再判断两子树高度差是否小于2。时间复杂度O( n 2 ) (n^2)n2
时间复杂度高是因为每一个节点作为根节点,其子树的高度都会被计算一次

代码示例

intgetHeight(TreeNoderoot){if(root==null)return0;if(root.left==null&&root.right==null)return1;intleftN=getHeight(root.left);intrightN=getHeight(root.right);returnMath.max(leftN,rightN)+1;}publicbooleanisBalanced(TreeNoderoot){if(root==null)returntrue;intleftN=getHeight(root.left);intrightN=getHeight(root.right);if(Math.abs(leftN-rightN)>1)returnfalse;returnisBalanced(root.left)&&isBalanced(root.right);

优化(时间复杂度O(n))

  • getHeight():每求一次的高度,都检查左右子树高度差是否小于2,不是则返回-1;如果接受值为-1,则继续返回-1;排除以上情况则返回计算的结果
  • isBalanced():判断getHeight()返回值是否为负数
intgetHeight(TreeNoderoot){if(root==null)return0;if(root.left==null&&root.right==null)return1;intleftN=getHeight(root.left);if(leftN<0)return-1;intrightN=getHeight(root.right);if(rightN<0)return-1;if(Math.abs(leftN-rightN)<2)returnMath.max(leftN,rightN)+1;elsereturn-1;}publicbooleanisBalanced(TreeNoderoot){if(root==null)returntrue;returngetHeight(root)>=0;}

5. 对称二叉树(LC101)

对称二叉树

题目描述

解题思路

把右子树翻转后判断左右子树是否相等

代码示例

publicbooleanisSymmetric(TreeNoderoot){returnisSameTree(root.left,invertTree(root.right));}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 19:39:36

DNV船舶入级规则RU-SHIP 2023-07:版本解读与设计送审实战指南

简介&#xff1a;面向船舶设计、审图与入级检验人员&#xff0c;DNV船级社2023年7月发布的《船舶分类规则》RU-SHIP PDF提供了系统化的船舶入级技术依据。该版规则在2022版框架基础上&#xff0c;重点更新法定认证证书签发、船旗国授权条件处理等要求&#xff0c;并涵盖总则、材…

作者头像 李华
网站建设 2026/9/20 19:38:22

VMware Workstation虚拟机创建超详细指南(17.6.4版)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 19:37:56

acme.sh + 阿里云DNS API:SSL证书自动续期完全指南

你还在每 90 天手动续一次 SSL 证书吗&#xff1f;如果是&#xff0c;我猜你已经设了好几个“证书还有 XX 天过期”的闹钟&#xff0c;甚至可能哪天手一抖忘了&#xff0c;第二天就迎来浏览器那个刺眼的红色警告页面。我自己手上十几个域名跑着 HTTPS 服务&#xff0c;以前每逢…

作者头像 李华
网站建设 2026/9/20 19:37:54

网盘直链解析实战:LinkSwift 5 分钟把 9 大网盘换成真实直链

网盘直链解析实战&#xff1a;LinkSwift 5 分钟把 9 大网盘换成真实直链 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 …

作者头像 李华