题目链接
Leetcode.101 对称二叉树 easy
题目描述
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
提示:
- 树中节点数目在范围 [ 1 , 1000 ] [1, 1000] [1,1000] 内
- − 100 < = N o d e . v a l < = 100 -100 <= Node.val <= 100 −100<=Node.val<=100
解法:递归
设 p p p 和 q q q 分别是当前根结点 r o o t root root 的左右子结点。
- 如果
p
=
=
n
u
l
l
p
t
r
&
&
q
=
=
n
u
l
l
p
t
r
p == nullptr \&\& q == nullptr
p==nullptr&&q==nullptr,返回
true
- 如果
p
=
=
n
u
l
l
p
t
r
∣
∣
q
=
=
n
u
l
l
p
t
r
p == nullptr || q == nullptr
p==nullptr∣∣q==nullptr,返回
false
- 如果
p
.
v
a
l
≠
q
.
v
a
l
p.val \neq q.val
p.val=q.val,返回
false
接着再分别递归的判断 p p p的左子结点, q q q 的右子结点; p p p的右子结点, q q q 的左子结点
时间复杂度: O ( n ) O(n) O(n)
C++代码:
class Solution {
public:
bool dfs(TreeNode *p,TreeNode *q){
if(p == nullptr && q == nullptr) return true;
if(p == nullptr || q == nullptr) return false;
if(p->val != q->val) return false;
return dfs(p->left,q->right) && dfs(p->right,q->left);
}
bool isSymmetric(TreeNode* root) {
return dfs(root->left,root->right);
}
};