请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
//主要思路是利用一个队列存储结点,类似于BFS查找,以根结点为中轴线判断左右值是否相等,且一边结点不能缺少
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
if(pRoot == nullptr)
{
return true;
}
deque<TreeNode*> ret;
ret.push_back(pRoot->left);
ret.push_back(pRoot->right);
while(!ret.empty())
{
TreeNode *tree_left = ret.front();
ret.pop_front();
TreeNode *tree_right = ret.front();
ret.pop_front();
if(tree_left == nullptr && tree_right == nullptr)
{
continue;
}
if(tree_left == nullptr || tree_right == nullptr) //一边结点为空时镜像不成立
{
return false;
}
if(tree_left->val != tree_right->val)
{
return false;
}
ret.push_back(tree_left->left); //左子树的左孩子对应右子树的右孩子
ret.push_back(tree_right->right); //
ret.push_back(tree_left->right); //左子树的右孩子对应右子树的左孩子
ret.push_back(tree_right->left);
}
return true;
}
};