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

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

相关推荐
Ahtacca2 分钟前
Maven 入门:项目管理与依赖管理的核心玩法
java·maven
CoderCodingNo5 分钟前
【GESP】C++四级真题 luogu-B4416 [GESP202509 四级] 最长连续段
开发语言·c++·算法
a程序小傲7 分钟前
京东Java面试被问:Fork/Join框架的使用场景
java·开发语言·后端·postgresql·面试·职场和发展
⑩-11 分钟前
Java四种线程创建方式
java·开发语言
月光在发光13 分钟前
22_GDB调试记录(未完成)
java·开发语言
222you14 分钟前
SpringAOP的介绍和入门
java·开发语言·spring
程序员zgh16 分钟前
代码重构 —— 读后感
运维·c语言·开发语言·c++·重构
liulilittle23 分钟前
moodycamel::ConcurrentQueue 清空队列的方法论
开发语言·c++
Violet_YSWY24 分钟前
哪些常量用枚举,哪些用类
java
shoubepatien25 分钟前
JAVA -- 09
java·开发语言