题目
代码
/**
* 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 isSymmetric(TreeNode* root) {
// return isMirror(root,root);
list<TreeNode*> que;
que.push_back(root);
que.push_back(root);
while(que.empty()==false)
{
auto t1=que.front();
que.pop_front();
auto t2=que.front();
que.pop_front();
if (t1 == nullptr && t2 == nullptr) continue;
if (t1 == nullptr || t2 == nullptr) return false;
if (t1->val != t2->val) return false;
que.push_back(t1->left);
que.push_back(t2->right);
que.push_back(t1->right);
que.push_back(t2->left);
}
return true;
}
//这是递归的方法
// bool isMirror(TreeNode* left,TreeNode* right)
// {
// if(left==nullptr&&right==nullptr) return true;
// if(left==nullptr||right==nullptr) return false;
// return (left->val==right->val)&&isMirror(left->right,right->left)&&isMirror(left->left,right->right);
// }
};
思路
迭代的方法,用list存储值,每次压入两个节点的左孩子和右孩子,取出的时候进行判断即可;递归的方法每次放入的是节点的左边对应另一个节点的右边。