【剑指offer】28. 对称的二叉树
剑指 Offer 28. 对称的二叉树
知识点:二叉树;递归
题目描述
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
示例
输入:root = [1,2,2,3,4,4,3]
输出:true
输入:root = [1,2,2,null,3,null,3]
输出:false
解法一:递归法
函数功能:判断树是否对称
1.终止条件:left和right都为null,return true;
2.最小单元节点做什么:判断是否对称呗:如果有一方到null另一方没到 return false; 如果left和right值不等,return false,判断left的left和right的right是否平衡,判断left的right和right的left是否平衡;
3.什么时候做:开始遍历的时候就可以去判断了,放在先序的位置上。
我们如何定义两棵子树 a 和 b 是否 “对称” ?
当且仅当两棵子树符合如下要求时,满足 “对称” 要求:
- 1.两棵子树根节点值相同;
- 2.两颗子树的左右子树分别对称,包括:
- a 树的左子树与 b 树的右子树相应位置的值相等
- a 树的右子树与 b 树的左子树相应位置的值相等
递归终止条件:
- 1.两边都走到树头了,而且L.val = R.val = null, return true;
- 2.有一边走到头了,即有一个节点为空,L.val == null || R.val == null, return false;
- 3.两个子树的值不相等,下面就不用比了,直接false;L.val != R.val, return false;
其他情况,说明在这一层上已经相等了,我们则要分别检查 L 和 R 的左右节点是否 “对称” ,即递归调用 check(L.left, R.right) 和 check(L.right, R.left)
递归还是抓住两点本质:
- 递归的终止条件:上面说的那3条;
- 函数的功能是干什么的,缩小范围:函数就是用来比较两个树是否对称的,往里传树就行了,我能得到结果;从上往下,想要知道整个树是否对称需要知道左右子树是否对称,这是去的过程;知道了左右子树是否对称那就能知道大树是否对称了,这是回的过程。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
else{
return isSymmetric(root.left, root.right);
}
}
private boolean isSymmetric(TreeNode left, TreeNode right){
if( left == null && right == null) return true;
if( left == null || right == null) return false;
if( left.val != right.val) return false;
return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
}
}
时间复杂度;0(N),每个节点恰好被遍历一次;
空间复杂度;O(N),递归过程中栈的开销;
相关链接
【剑指offer】28. 对称的二叉树的更多相关文章
- [剑指 Offer 28. 对称的二叉树]
剑指 Offer 28. 对称的二叉树 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / ...
- 【Java】 剑指offer(28) 对称的二叉树
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它 ...
- 剑指offer——28对称的二叉树
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题解: 使用正常前序遍历与反向的前序遍历进行比较结果即可,注意,需将空 ...
- 剑指Offer:对称的二叉树【28】
剑指Offer:对称的二叉树[28] 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题目分析 Java题解 /* publi ...
- Go语言实现:【剑指offer】对称的二叉树
该题目来源于牛客网<剑指offer>专题. 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. Go语言实现: 方法一:递归 / ...
- 剑指offer:对称的二叉树(镜像,递归,非递归DFS栈+BFS队列)
1. 题目描述 /** 请实现一个函数,用来判断一颗二叉树是不是对称的. 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的 */ 2. 递归 思路: /** 1.只要pRoot.left和 ...
- 剑指offer:对称的二叉树
题目描述: 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 思路分析: 二叉树的镜像就是左右相反,对称二叉树即镜像相等.利用一个递归函数 ...
- 剑指Offer 58. 对称的二叉树 (二叉树)
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题目地址 https://www.nowcoder.com/practice/ ...
- [剑指Offer] 58.对称的二叉树
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. [思路]递归,关键是isSame函数中的最后一句 /* struct Tree ...
- 【剑指offer】对称的二叉树
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 分析:从上到下直接遍历,利用栈或者队列暂存结点,注意结点的存和取都是成对的 c ...
随机推荐
- 前端 JS 之 AJAX 简介及使用
概述 AJAX 是一个缩写,它的全名是 Asynchronous JavaScript and XML,意思就是异步 JavaScript 和 XML,即用JavaScript执行异步网络请求. AJ ...
- UF_MTX 矩阵操作
Open C UF_MTX2_copyUF_MTX2_determinantUF_MTX2_identityUF_MTX2_initializeUF_MTX2_multiplyUF_MTX2_mu ...
- 有效Ajax案例
<script>$(document).ready(function(){ $("input:submit").click(function(){ $.ajax({ t ...
- idea自动更新代码
如何开启或关闭idea的自动更新代码? File-Setting-Appearance&Beha-System Setting-Updates 选中或取消勾选Automatically che ...
- 循序渐进BootstrapVue,开发公司门户网站(4)--- 使用b-carousel-slide组件实现图片轮播以及vue-awesome-swiper实现图片滑动展示
在BootstrapVue组件库里面,提供了很多对Bootstrap同等类似的组件封装,其中图片轮播可以采用b-carousel-slide组件实现,而有一些小的图片,如客户/合作伙伴Logo或者友情 ...
- Pun(PhotonUnityNetwork)
介绍 Photon Unity Networking(首字母缩写 PUN)是一个 Unity 多人游戏插件包.它提供了身份验证选项.匹配,以及快速.可靠的通过我们的 Photon 后端实现的游戏内通信 ...
- explicit 关键字 禁止隐式转换
explicit可以抑制内置类型隐式转换,所以在类的构造函数中,使用explicit关键字,防止不必要的隐式转换
- 18、通过yum命令只下载rpm包不安装
18.1.说明: 经常遇到服务器没有网络的情况下部署环境,或者创建自己的 yum 仓库等,这时就需要下载 rpm 包. 18.2.方法一,yumdownloader(推荐): 如果只想通过 yum 下 ...
- 不止Docker:8款容器管理开源方案
Docker诞生于2013年,并普及了容器的概念,以至于大多数人仍然将容器的概念等同于"Docker容器". 作为第一个吃螃蟹的人,Docker设置了新加入者必须遵守的标准.例如, ...
- 重新整理 .net core 实践篇————cookie 安全问题[三十八]
前言 简单整理一下cookie的跨站攻击,这个其实现在不常见,因为很多公司都明确声明不再用cookie存储重要信息,不过对于老站点还是有的. 正文 攻击原理: 这种攻击要达到3个条件: 用户访问了我们 ...