LeetCode每日1题--对称二叉树

简介: LeetCode每日1题--对称二叉树

前言


算法的重要性不言而喻!区分度高!

现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。

说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!

提前入门学习书籍:CPrimerPlus、大话数据结构

image.png


刷题网站


代码随想录 (programmercarl.com)

leetcode

我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以

刷题嘛,最重要的就是坚持了!!!


画图软件


OneNote

这个要经常用,遇见不懂的流程的话就拿它画一画!


笔记软件


Typoral


题目


image.png


解析


首先还是一个二叉树的定义


/**
 * 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;
    }
}
以上,明天继续



相关文章
|
6天前
leetcode代码记录(二叉树的所有路径
leetcode代码记录(二叉树的所有路径
12 0
|
1天前
|
算法
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)(下)
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)
7 1
|
1天前
|
算法 C++
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)(上)
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)
7 1
|
6天前
leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
8 0
|
6天前
leetcode代码记录(二叉树的最小深度
leetcode代码记录(二叉树的最小深度
10 0
|
6天前
leetcode代码记录(二叉树的最大深度
leetcode代码记录(二叉树的最大深度
9 0
|
6天前
leetcode代码记录(翻转二叉树
leetcode代码记录(翻转二叉树
8 0
|
6天前
leetcode代码记录(二叉树的层序遍历
leetcode代码记录(二叉树的层序遍历
12 0
|
6天前
|
算法
leetcode代码记录(二叉树递归遍历
leetcode代码记录(二叉树递归遍历
8 0
|
6天前
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
[leetcode~dfs]1261. 在受污染的二叉树中查找元素