LeetCode 剑指 Offer 28. 对称的二叉树
时间:2022-07-22
本文章向大家介绍LeetCode 剑指 Offer 28. 对称的二叉树,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
剑指 Offer 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/
2 2
/ /
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/
2 2
3 3
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false
解题
package tree.二叉树的镜像;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
/**
* @Auther: truedei
* @Date: 2020 /20-6-10
* @Description: 二叉树镜像
*/
public class Solution {
static public boolean isSymmetric(TreeNode root) {
//根节点为null时,返回true,说明是
return root == null?true:check(root.left,root.right);
}
private static boolean check(TreeNode left, TreeNode right) {
if(left == null && right==null)
return true;
if(left==null || right==null || left.val != right.val)
return false;
return check(left.left,right.right) && check(left.right,right.left);
}
public static void main(String[] args) {
TreeNode t1 = new TreeNode(1);
TreeNode t2 = new TreeNode(2);
TreeNode t3 = new TreeNode(2);
TreeNode t4 = new TreeNode(3);
TreeNode t5 = new TreeNode(4);
TreeNode t6 = new TreeNode(4);
TreeNode t7 = new TreeNode(3);
t1.left=t2;
t1.right=t3;
t2.left=t4;
t2.right=t5;
t3.left=t6;
t3.right=t7;
boolean bool = isSymmetric(t1);
System.out.println(bool);
}
}
class TreeNode {
int val;//每个节点存放的数据
TreeNode left;//左节点
TreeNode right;//右节点
TreeNode(int x) { val = x; }
}
核心代码:
static public boolean isSymmetric(TreeNode root) {
//如果传过来的是null,则返回true,否则就去检查左右节点
return root == null?true:check(root.left,root.right);
}
//负责递归检查左右节点
private static boolean check(TreeNode left, TreeNode right) {
//如果左右都为null,说明该二叉树也是对称的
if(left == null && right==null)
return true;
//如果缺少左右子节点的某一个,或者不相等,那就不是一颗对称二叉树
if(left==null || right==null || left.val != right.val)
return false;
//否则就检查,该二叉树的左节点的左和右节点的右;和检查另外两个
//如果都是true,说明对称
return check(left.left,right.right) && check(left.right,right.left);
}
- MONO x64 amd_x64
- DN榜:最近3个域名成交金额均达到六位数美金
- 采访Philipp Crocoll:安卓平台上整合Java和C#
- “AS3.0高级动画编程”学习:第一章高级碰撞检测
- AI分析师PK人类分析师,结果竟然是……
- 纯代码修改WordPress 默认 Gravatar 头像的方法
- 这些行业的饭碗要被机器人抢了 再不努力就被它们PK掉了!
- DeveWork.com 上线“前端工具箱”(附源码下载)
- Debug和Release之本质区别
- ArgoUML -- 开源UML 建模工具
- 性能分析工具-PerfView
- c#测试字符串是否为GUID的几种方法
- 编译错误CS1595
- 分享一款带尖角浮出 公告栏 样式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 还在手动整理数据库文档?试试这个工具
- Elasticsearch 常见的 8 种错误及最佳实践
- Spark流式状态管理
- Scala中的IO操作及ArrayBuffer线程安全问题
- 设计模式之单例模式
- Roslyn 理解 msbuild 的清理过程
- gorm聚合查询group结合join和count
- 潘石屹用Python解决100个问题 | 集合
- Catalina 默认使用zsh了,你可习惯
- LeetCode 354 Russian Doll Envelopes (动态规划)
- 设计模式之原型模式
- 设计模式之工厂方法模式
- Python 随机数生成
- OWIN 初探
- Spark和Spring整合处理离线数据