两分钟弄懂对称二叉树
Posted 五分钟学算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两分钟弄懂对称二叉树相关的知识,希望对你有一定的参考价值。
大家好呀,我是吴师兄,今天照例来更新一道 LeetCode 算法题,根据以往数据来看,这类文章的打开率普遍不高,一般在三四千左右,远远低于水文或者热点文一两万的阅读量,一个合格的自媒体人正确的做法应该是抛弃前者不再更新这类技术文,我也曾经纠结彷徨过,到底是追逐阅读量还是放平心态写好技术文服务好读者。
这种心态导致我有时候看到技术文阅读量、点赞量不佳会愤愤不平:MD,再也不写技术文了,可隔了一会看到一道算法题又忍不住想写出来分享。
反正挺难受的,直到前几天我看到了下面这段话。
扯远了,来看今天的这道算法题。
这道题目的描述是这样子的:实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
题目很好理解,首先需要弄清楚对称的含义,它隐含了三层意思,即对于树中任意两个对称节点 L 和 R ,一定有:
1、L.val = R.val:即此两对称节点值相等。
2、L.left.val = R.right.val:即 L 的左子节点和 R 的右子节点对称。
3、 L.right.val = R.left.val:即 L 的右子节点和 R 的左子节点对称。
思路也就很简单了,我们可以从底至顶进行递归操作,判断每对节点是否对称,从而判断树是否为对称二叉树。
直接通过图片来看是怎么操作的。
代码如下,两分钟应该能写出来:
// 公众号:五分钟学算法
// 作者:程序员吴师兄
class Solution {
public boolean isSymmetric(TreeNode root) {
// 边界情况
if(root == null) return true;
// 递归判断左子树和右子树是否对称
return isSymmetriacalCor(root.left,root.right);
}
private boolean isSymmetriacalCor(TreeNode L,TreeNode R){
// 如果某根子树的左右两子树同时为空,肯定是对称的,直接返回 true
if(L == null && R == null){
return true;
}
// 说明根子树的左右两子树有某子树为空,某子树有值,不对称,返回 false
if(L == null || R == null){
return false;
}
// 左子树的值与右子树的值不相等,不对称,返回 false
if(L.val != R.val){
return false;
}
// 递归的对比当前节点的左子树的左子树与右子树的右子树、左子树的右子树与右子树的左子树是否对称
return isSymmetriacalCor(L.left,R.right) && isSymmetriacalCor(L.right,R.left);
}
}
最后小小的总结一下,二叉树具备天然的递归性,往往在处理二叉树的题目时,我们都需要去思考怎么样利用递归,想清楚能解决 50% 的二叉树问题。
好了,今天的文章就到这里,我们下篇文章见,有收获记得点个赞,五分钟学算法,让算法面试没那么难!
以上是关于两分钟弄懂对称二叉树的主要内容,如果未能解决你的问题,请参考以下文章