持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情
前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前入门学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
题目
解析
首先还是一个二叉树的定义
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
其实就是比较左右子树是否是相互反转的嘛,所以我们用递归的方法来解题
递归解答
1.确定返回值和参数:判断是否相等,那就返回Boolean喽,参数的话就是两个子树
2.确定终止条件: 就是判断什么时候会返回结果,当左节点为空时、右节点为空时统统返回false 当两边都为空时,true 空节点的情况排除完了,剩下的判断逻辑就是通过递归逻辑来判断了节点值相同true,不同false
3.确定递归的逻辑 你可以发现,基本思路都是差不多
先是排除空节点的情况,之后判断左右节点的值是否相等
最后通过return compareInside && compareOutside;来判断是否为true,为true则认为是对称二叉树!
//递归逻辑判断子节点值是否相等
//比较内侧
boolean compareInside = compare(left.right,right.left);
//比较外侧
boolean compareOutside = compare(left.left,right.right);
return compareInside && compareOutside;
完整代码如下:
代码不难,加上我们前面的解析,应该都可以拿下完整代码
class Solution {
public boolean isSymmetric(TreeNode root) {
return compare(root.left,root.right);
}
boolean compare(TreeNode left,TreeNode right){
//首先排除空结点情况
if(left == null && right != null){
return false;
}
if(left != null && right == null){
return false;
}
if(left == null && right == null){
return true;
}
//排除节点值不相同的情况
if(left.val != right.val){
return false;
}
//递归逻辑判断子节点值是否相等
//比较内侧
boolean compareInside = compare(left.right,right.left);
//比较外侧
boolean compareOutside = compare(left.left,right.right);
return compareInside && compareOutside;
}
}
以上,明天继续