剑指offer 面试题28 对称的二叉树

1.题目

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

 

2.思路

首先根节点以及其左右子节点

左子节点的左子树和右子节点的右子树相同

左子节点的右子树和右子节点的左子树相同即可

递归

 

3.实现

class Solution {
public:
    bool isSymmetrical(TreeNode* pRoot)
    {
        if(pRoot == nullptr)
            return true;
        return helper(pRoot->left, pRoot->right);
    }
    bool helper(TreeNode* root1, TreeNode* root2)
    {
        //判断以root1为根节点的树 和以root2为根节点的树是否满足对称关系
        if(root1 == nullptr && root2 == nullptr)
            return true;
        
        if(root1 == nullptr || root2 == nullptr)
            return false;
        
        if(root1->val != root2->val)
            return false;
        
        return helper(root1->left, root2->right) && helper(root1->right, root2->left);
        
    }

};

猜你喜欢

转载自blog.csdn.net/u014128608/article/details/93139700