【Java】【力扣】101.对称二叉树

思路

递归

大问题:对比 左 右 是否对称

参数 左和右

todo 先凑合看

代码

复制代码
/**
 * 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;
 *     }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
       return isSymmetricLR(root.left,root.right);
    }

    //判断左树 和 右数 是否对称
    public boolean isSymmetricLR(TreeNode left,TreeNode right) {
        //都为空
        if (left == null&&right==null) {
            return true;
        }
        //一个空 一个不空
        else if (left == null&&right!=null){
            return false;
        } else if (left != null&&right==null) {
            return false;
        }

        //都不空,以下:
        //1.判左 和右本身是否不同
        if (left.val != right.val) {
            return false;
        }

        //2.判断左左 和右右是否不同
        //问题转化成 递归调用,其中 left为左左,right为右右
        if(!isSymmetricLR(left.left, right.right)){
            return false;
        }

        //3.判断左右 和右左是否不同
        //问题转化成 递归调用,其中 left为左右,right为右左
        if(!isSymmetric(left.right, right.left)){
            return false;
        }
        return true;
    }
    
    }

错误思路

得到中序遍历结果 判断是否对称

出问题: todo为什么这个不行

复制代码
/**
 * 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;
 *     }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
        //得到中序遍历结果 判断是否对称,双指针
        List<Integer> list = inorderTraversal(root);
        
        //定义指针
        int begin=0;
        int end=list.size()-1;
        while (begin<end){
            if (Objects.equals(list.get(begin), list.get(end))){
                begin++;
                end--;
            }
            else{return false;}
        }
        //退出:等于-相遇 小于-错开
        //如果推出循坏还是没有 不相等,就是对称序列
        return true;
    }

     //二叉树中序遍历
    public List<Integer> inorderTraversal(TreeNode root) {
        if (root==null){
            return new ArrayList<>();
        }

        //初始化 list
        List list=new ArrayList<Integer>();

        //左子树
        //问题转化为:遍历以root.left为根的树,并把结果返回,追加到原来的list上
        if(root.left!=null) {
            list.addAll(inorderTraversal(root.left));
        }

        //当前
        list.add(root.val);

        //右子树
        if(root.right!=null) {
            list.addAll(inorderTraversal(root.right));
        }
        return list;
    }

}

总结

  1. todo "得到中序遍历结果 判断是否对称" 为什么不行,思考想问题 怎么想更多测试用例

今天感悟:刷题 不在量,在每一题吃透 ,相关拓展也吃透,相关题型都理解

相关推荐
nanxun8861 天前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103511 天前
Day01 | Java 基础(Java SE)
java
行者全栈架构师1 天前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师1 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_01 天前
mac(m5)平台编译openjdk
java
唐青枫2 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马2 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261352 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261352 天前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454753 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程