每天一道leetcoed:剑指 Offer 28. 对称的二叉树(适合初学者&树)

今日份题目:

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [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

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

示例2

输入:root = [1,2,2,null,3,null,3]
输出:false

提示

0 <= 节点个数 <= 1000

题目思路

树对称,可以通过左右交叉对此树的子结构判断是否对称。所以不同于判断是否为子结构的唯一地方就是是判断A的左子树和B的右子树是否相同以及A的右子树是否和A的左子树相同。判断子结构是左左判断,右右判断。

代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution 
{
public:
    bool isTheTree(TreeNode *A, TreeNode *B) 
    {
        if(A==NULL&&B==NULL) return true;
        if((A==NULL&&B!=NULL)||(B==NULL&&A!=NULL)) return false;
        if(A->val!=B->val) return false;
        return isTheTree(A->left,B->right)&&isTheTree(A->right,B->left);
    }

    bool isSymmetric(TreeNode* root) 
    {
        return isTheTree(root,root);
    }
};

提交结果

每天一道leetcoed:剑指 Offer 28. 对称的二叉树(适合初学者&树)_第1张图片

欢迎大家在评论区讨论,如有不懂的代码部分,欢迎在评论区留言!

你可能感兴趣的:(剑指Offer,算法,leetcode,c++,职场和发展,数据结构,图论)