剑指 Offer 28. 对称的二叉树 -- 递归

本文详细介绍了如何使用递归方法解决LeetCode上的剑指Offer28问题,即判断一棵二叉树是否对称。通过定义一个`judge`辅助函数,检查左右子节点的对称性,实现了O(N)的时间复杂度和空间复杂度解决方案。同时,文章还提供了复杂度分析和相关参考资料。
摘要由CSDN通过智能技术生成

0 题目描述

leetcode原题链接:剑指 Offer 28. 对称的二叉树

在这里插入图片描述

1 递归解法

对称二叉树定义: 对于树中 任意两个对称节点 L L L R , R, R, 一定有:

  • L . v a l = R . v a l : L . v a l=R . v a l: L.val=R.val: 即此两对称节点值相等。
  • L . l e f t . v a l = R . r i g h t . v a l L.left.val = R.right.val L.left.val=R.right.val: 即 L L L 的左子节点 和 R R R 的右子节点对称;
  • L . r i g h t . v a l = R . l e f t . v a l L.right.val = R.left.val L.right.val=R.left.val : 即 L L L 的佑子节点 和 R R R 的左子节点对称。
    在这里插入图片描述
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        return self.judge(root, root)
        
    def judge(self, left: TreeNode, right: TreeNode)-> bool:
        if not left and not right: return True
        if not left or not right: return False
        if left.val != right.val: return False
        return self.judge(left.left, right.right) and self.judge(left.right, right.left)

复杂度分析:
时间复杂度 O ( N ) O(N) O(N) : 其中 N 为二叉树的节点数量,每次执行 judge() 可以判断一对节点是否对称,因此最多调用 N/2 次 judge() 方法。
空间复杂度 O ( N ) O(N) O(N): 最差情况下,二叉树退化为链表,系统使用 O ( N ) O(N) O(N) 大小的栈空间。

参考资料

面试题28. 对称的二叉树(递归,清晰图解)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值