剑指 28

本文探讨了如何在剑指 Offer 中正确判断二叉树的对称性,通过修复错误思路并提出有效解决方案,重点在于理解ListNode反转和对象比较的差异。讲解了从置换后比较到保留root反转的尝试,最终确定了通过左右子节点对比的正确方法。
摘要由CSDN通过智能技术生成

剑指 Offer 28. 对称的二叉树

题目:

在这里插入图片描述

思路:

思路:
自己犯了两个错误:
1.置换后进行下级比较,这样是不行的,一直比较的是置换前的
2.在第一种方案不行之后,使用保留root,再反转后进行比较,但是是同一个对象,两者还是相同的(为什么ListNode是可以的)
3.使用现有方案:左和右进行比较

``java
/**

  • Definition for a binary tree node.

  • public class TreeNode {

  • int val;
    
  • TreeNode left;
    
  • TreeNode right;
    
  • TreeNode(int x) { val = x; }
    
  • }
    */
    class Solution {
    public boolean isSymmetric(TreeNode root) {
    return judge(root, root);
    }

    private boolean judge(TreeNode root, TreeNode root1) {
    if (root == null && root1 == null) {
    return true;
    }
    if ((root == null && root1 != null) || (root != null && root1 == null)) {
    return false;
    }
    // 只有当根节点相等时,才继续向下判断
    if (root.val == root1.val) {
    return judge(root.left, root1.right) && judge(root.right, root1.left);
    } else {
    return false;
    }
    }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值