时间:2020-8-4
题目地址:https://leetcode-cn.com/problems/symmetric-tree/
题目难度:Medium
题目描述:
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
进阶:
你可以运用递归和迭代两种方法解决这个问题吗?
思路1:递归
按照大佬的思路写的,为啥别人思路那么清晰,我佛了
思路我都有,看到伪代码才发现自己的思维乱七八糟,头大啊
代码段1:通过
# 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:
if root is None: return True
def travel(node1, node2):
if node1 == None and node2 == None:
flag = True
elif node1 != None and node2 != None and node1.val == node2.val and travel(node1.right, node2.left) and travel(node1.left, node2.right):
flag = True
else:
flag = False
return flag
return travel(root.left, root.right)
总结:
- 递归还是写的少
- 看下优化版的代码
class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
def check(node1, node2):
if not node1 and not node2:
return True
elif not node1 or not node2:
return False
if node1.val != node2.val:
return False
return check(node1.left, node2.right) and check(node1.right, node2.left)
return check(root, root)
思路2:迭代
其实就是层序遍历,然后检查每一层是不是回文数组
代码段2:通过
总结:
- --
后续优化:Python 迭代:其实就是层序遍历,然后检查每一层是不是回文数组