6.5对称二叉树(LC101

编程入门 行业动态 更新时间:2024-10-20 13:33:44

6.5<a href=https://www.elefans.com/category/jswz/34/1763015.html style=对称二叉树(LC101"/>

6.5对称二叉树(LC101

算法:

其实就是比较左右子树是否可以翻转

比较的时候:

比较外面的节点是否相等,如示例1中的节点3

比较里面的节点是否相等,如示例1中的节点4

基本思路是这样的,那怎么遍历呢?

二叉树的题一定要掌握到底用哪种遍历来解决题目,这样才能理解得更深刻!

这道题一定是后序遍历!

因为我们要搜集孩子信息,返回上一层,比如:

左子树:我们要搜集3(L) 4(R)的信息,返回给2

右子树:我们要搜集3(R) 4(L)的信息,返回给2

这样才能比较2.left和2.right是否对称

调试过程:

递归法:

原因:compare函数的定义不对,我定义的输入一个节点,但实际调用的是两个指针。

compare函数定义时的输入应该是两个子树,left和right

修改后还是报错了,发现是对空树的理解不对,空树被认为是对称的,而我以为不对称,改过来就好了。

正确代码:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def isSymmetric(self, root: Optional[TreeNode]) -> bool:if root == None:return Trueelse:res = selfpare(root.left, root.right)return res
#定义一个compare函数,用来比较左右子树
#具体比较就是外面的和外面的比,里面的和里面的比def compare(self, left, right) -> bool:#排除一些绝对不对称的情况:if left == None and right != None:return Falseif right == None and left != None:return Falseif right == None and left == None:return Trueif right and left:outside = selfpare(left.left,right.right)inside = selfpare(left.right,right.left)issame = outside and insidereturn issame

时间空间复杂度:

时间复杂度:
`isSymmetric`函数会递归调用`compare`函数。在`compare`函数中,我们比较给定二叉树的左子树和右子树。由于每个节点只访问一次,时间复杂度为O(n),其中n是二叉树中的节点数。

空间复杂度:
空间复杂度取决于递归栈的最大深度。在最坏的情况下,当二叉树是倾斜的且高度为n时,空间复杂度为O(n)。这是因为在任何时刻,递归栈最多可以容纳n个函数调用。

总体而言,时间复杂度为O(n),空间复杂度在最坏情况下为O(n)。

更多推荐

6.5对称二叉树(LC101

本文发布于:2023-11-15 10:26:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1598151.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对称   二叉树

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!