Leetcode.101 对称二叉树

题目链接

Leetcode.101 对称二叉树 easy

题目描述

给你一个二叉树的根节点 root, 检查它是否轴对称。

示例 1:

Leetcode.101 对称二叉树_第1张图片

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

Leetcode.101 对称二叉树_第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);
    }
};

你可能感兴趣的:(Leetcode,深度优先,算法,leetcode)