解题思路
平时使用vector比较多,反而将队列给生疏了。
在练习了102-二叉树的层序遍历之后,再写这道题,能够更好的明白队列的使用。
好像队列和树相结合的运用比较多。
队列的特点就是先进先出。就相当于告诉内存 hey body,我现在还不知道我要怎么处理这些数据,但是我知道某个点我会来处理的。
你要在我需要处理的时候,按照我给你的顺序给我哦!
我突然明白循环不变量是什么了。
循环不变量是因为循环结构中,需要保持处理步骤可迭代,即可循环处理。
而不单单指的是某个变量。
Am i right???
等高铁写…
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode* root) {
TreeNode *left, *right;
if(!root) return true;
queue<TreeNode*> q;
q.push(root->left);
q.push(root->right);
while(!q.empty()) {
// 取对称节点
left=q.front();
q.pop();
right=q.front();
q.pop();
// 镜面对称的节点是否一致
if(left==NULL && right==NULL)
continue;
if(left==NULL || right==NULL)
return false;
if(left->val!=right->val)
return false;
// 左孩子的左孩子与右孩子的右孩子
q.push(left->left);
q.push(right->right);
// 左孩子的右孩子和右孩子的左孩子
q.push(left->right);
q.push(right->left);
}
return true;
}
};