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

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

相关推荐
周杰伦fans1 天前
C# 中的**享元工厂**模式
开发语言·数据库·c#
2501_941148611 天前
C++实时数据处理实战:多线程与异步IO结合高性能代码解析
java·后端·struts
u***u6851 天前
C++在系统中的异常处理
java·开发语言·c++
空空kkk1 天前
SpringMVC——拦截器
java·数据库·spring·拦截器
爱学测试的雨果1 天前
收藏!软件测试面试题
开发语言·面试·职场和发展
文涛是个小白呀1 天前
Java集合大调研
java·学习·链表·面试
我也爱吃馄饨1 天前
写的webpack插件如何适配CommonJs项目和EsModule项目
java·前端·webpack
Seven971 天前
剑指offer-43、左旋转字符串
java
安然无虞1 天前
JMeter性能测试工具·下
开发语言·测试工具·jmeter
4***R2401 天前
C++在音视频处理中的库
开发语言·c++·音视频