和之前对二叉树的处理类似,可以通过队列的方式处理递归的过程。在首次创建队列时将root入队2次即可,每次提取两个结点并比较它们的值(队列中每两个连续的结点应该是相等的,而且它们的子树互为镜像),然后将两个结点的左右子结点按相反的顺序插入队列中。当队列为空时,或者我们检测到树不对称(即从队列中取出两个不相等的连续结点)时,该算法结束。
class Solution{ public: bool isSymmetric(TreeNode* root){//使用迭代的方法 return check(root, root); } bool check(TreeNode* t1, TreeNode* t2) { queue<TreeNode*> q; q.push(t1); q.push(t2); while(!q.empty()){ auto l = q.front(); q.pop(); auto r = q.front(); q.pop(); if(!l && !r) continue; if(!l|| !r ||(l->val != r->val)) return false; q.push(l->left); q.push(r->right); q.push(l->right); q.push(r->left); } return true; } };