【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 "得到中序遍历结果 判断是否对称" 为什么不行,思考想问题 怎么想更多测试用例

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

相关推荐
sunshine22 girl3 分钟前
Java学习五 面向对象高级5 内部类3-静态内部类和局部内部类(了解)
java·学习
en.en..5 分钟前
Linux 进程退出exit(函数)
java·开发语言·算法
李游Leo6 分钟前
HarmonyOS 7 TaskPool + Node-API + zstd:Native 批量压缩任务的主线程隔离、进度回传与资源收口【鸿蒙心迹】
java·华为·harmonyos
Cx330❀8 分钟前
【Qt 进阶指南】详解 Qt 常用标准对话框与主窗口组件架构
开发语言·qt·ui·性能优化·架构·图形渲染
Light Gao8 分钟前
Encoder 与 Decoder 详解:从 Embedding 到 Seq2Seq 的完整数据流
java·开发语言·embedding
HZZD_HZZD9 分钟前
弱网下CoAP还省吗?合众致达Cat.1电表90天实测:MQTT重连流量占52%、续航差距从38%拉大到73%
开发语言·物联网·php·腾讯云
web打印社区12 分钟前
Windows 网页静默打印设置步骤:客户端、防火墙与联调清单
开发语言·前端·javascript·chrome·pdf·ecmascript
小师兄吃牛肉21 分钟前
什么是R语言?如何快速学习R语言
开发语言·学习·r语言
All for pursuit.24 分钟前
【回溯-2】22.括号生成
数据结构·c++·算法·leetcode
程序猿乐锅36 分钟前
【黑马点评 | 第十一篇】关注 Feed 流实现
java·数据库·redis·分布式·后端·缓存·maven