Leetcode.101 对称二叉树
题目链接
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<=Node.val<=100-100 <= Node.val <= 100−100<=Node.val<=100
解法:递归
设 ppp 和 qqq 分别是当前根结点 rootrootroot 的左右子结点。
- 如果 p==nullptr&&q==nullptrp == nullptr \\&\\& q == nullptrp==nullptr&&q==nullptr,返回
true
- 如果 p==nullptr∣∣q==nullptrp == nullptr || q == nullptrp==nullptr∣∣q==nullptr,返回
false
- 如果 p.val≠q.valp.val \\neq q.valp.val=q.val,返回
false
接着再分别递归的判断 ppp的左子结点,qqq 的右子结点;ppp的右子结点,qqq 的左子结点
时间复杂度: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);}
};