前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班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; } } 以上,明天继续