101.对称二叉树

本文深入探讨了如何使用递归解决对称二叉树的问题,通过分析递归点,提出判断对称性的关键条件。作者强调递归的理解深度对解决问题的重要性,并给出了详细的思路和代码实现,包括关键的递归函数`dfs`,该函数比较左右子树的对应节点值和子树的对称性来判断整个树的对称性。

评论区看到的,觉得说的不错

// 递归的难点在于:找到可以递归的点 为什么很多人觉得递归一看就会,一写就废。 
	或者说是自己写无法写出来,关键就是你对递归理解的深不深。
// 对于此题: 递归的点怎么找?从拿到题的第一时间开始,思路如下:
// 1.怎么判断一棵树是不是对称二叉树? 答案:如果所给根节点,为空,那么是对称。
	如果不为空的话,当他的左子树与右子树对称时,他对称
// 2.那么怎么知道左子树与右子树对不对称呢?在这我直接叫为左树和右树 
	答案:如果左树的左孩子与右树的右孩子对称,左树的右孩子与右树的左孩子对称,那么这个左树和右树就对称。
// 仔细读这句话,是不是有点绕?怎么感觉有一个功能A我想实现,但我去实现A的时候又要用到A实现后的功能呢?
// 当你思考到这里的时候,递归点已经出现了: 
	递归点:我在尝试判断左树与右树对称的条件时,发现其跟两树的孩子的对称情况有关系。
// 想到这里,你不必有太多疑问,上手去按思路写代码,函数A(左树,右树)功能是返回是否对称
// def 函数A(左树,右树): 左树节点值等于右树节点值 且 函数A(左树的左子树,右树的右子树)
	函数A(左树的右子树,右树的左子树)均为真 才返回真
// 实现完毕。。。
// 写着写着。。。你就发现你写出来了。。。。。。
class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root == null) return true;
        return dfs(root.left, root.right);
    }

    private boolean dfs(TreeNode node1,TreeNode node2){
        if(node1 == null && node2 == null) return true;
        if(node1 == null || node2 ==null || node1.val != node2.val) return false;
        return dfs(node1.left, node2.right) && dfs(node1.right, node2.left);
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值