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

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

相关推荐
To_OC6 小时前
LC 17 电话号码的字母组合:我的回溯算法,就是从这道题开窍的
javascript·算法·leetcode
黒亱中旳6 小时前
Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比
java·人工智能·spring
网络工程小王6 小时前
[智能对话系统架构设计文档]
java·系统架构·langraph
alxraves7 小时前
医用超声远程会诊系统:会诊平台的核心架构与功能解析
java·人工智能·架构
带刺的坐椅7 小时前
用 Solon AI ReActAgent 落地智能客服工单处理
java·ai·llm·agent·solon·react-agent
我是坏垠7 小时前
Crypto、Cipher与Password:Java加密开发的三个核心概念
java·开发语言·python
white_ant8 小时前
JDK LTS 版本升级迁移注意事项大全
java·开发语言
Bobolink_8 小时前
跨境业务网络环境评估,“干净、一致、独享”三个关键指标
开发语言·网络·php·跨境网络·网络环境
你怎么知道我是队长8 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
xingke8 小时前
C 语言多文件编程:(一)头文件、extern、编译链接
c语言·开发语言·多文件