二叉树-对称二叉树

代码随想录-刷题笔记

101. 对称二叉树 - 力扣(LeetCode)

内容:

本题有一定的难度,但其实想明白需要同时用到左右节点之后,就没什么难度了

本题是看左右是否对称,并非左右节点是否相等,相信仔细读过题不可能不明白这一点

好了,接下来开始递归三部曲

1.确定返回值和参数

因为要返回true or false , 所以一定是 bool类型 , 参数上面也提到一定要是左右节点

public boolean compare(TreeNode node1 , TreeNode node2)

2.确认终止条件 ,

node1的left 和 node2的 right 完全相等

node2的left 和 node1的 right完全相等 

凡是不满足上面的都是终止条件.

3.确认递归逻辑

对于两个节点,必须保证 外侧和里侧都为true才可以.

从上面三点可以轻松得到代码

/**
 * 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 compare(TreeNode node1 , TreeNode node2) {
        if(node1 == null && node2 != null ) return false;
        else if(node1 != null && node2 == null) return false;
        else if(node1 == null && node2 == null) return true;
        else if(node1.val != node2.val) return false;

        boolean outSide = compare(node1.left , node2.right);
        boolean inSide = compare(node1.right , node2.left);
        return outSide && inSide;
    }
    public boolean isSymmetric(TreeNode root) {
        if(root!= null) 
            return compare(root.left , root.right);
        return true;
    }
}

总结:

本题还是比较基础的问题,但是要注意一些细节才可以. 我脑子比较笨,当时就没想到需要同时加载两个节点.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值