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) 大小的栈空间。