剑指offer-对称的二叉树

Posted by BY Tony Huang on June 13, 2019

题目描述:

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

算法思想:

对称的二叉树遍历,先左后右和先右后左结果是一样的

代码:

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    bool isSymmetrical(TreeNode* pRoot)
    {
  int i,j;
        if(pRoot==NULL)
        {
            return true;
        }
        queue<TreeNode*>q1,q2;
        TreeNode* temp1;
            TreeNode* temp2;
        q1.push(pRoot->left);
        q2.push(pRoot->right);
        while(!q1.empty()&&!q2.empty())
        {
             temp1=q1.front();
            q1.pop();
            temp2=q2.front();
            q2.pop();
            if(temp1==NULL&&temp2==NULL)
            {
                continue;
            }
            if(temp1==NULL||temp2==NULL)
            {
                return false;
            }
            if(temp1->val!=temp2->val)
            {
                return false;
                
            }
            q1.push(temp1->left);
             q1.push(temp1->right);
             q2.push(temp2->right);
             q2.push(temp2->left);
        }
            
           return true; 
            
            
    }

};

这里要知道二叉树的性质