101. 对称二叉树
解题思路:
首先我们引入一个队列,这是把递归程序改写成迭代程序的常用方法。初始化时我们把根节点入队两次。每次提取两个结点并比较它们的值(队列中每两个连续的结点应该是相等的,而且它们的子树互为镜像),然后将两个结点的左右子结点按相反的顺序插入队列中。当队列为空时,或者我们检测到树不对称(即从队列中取出两个不相等的连续结点)时,该算法结束。
public:
bool check(TreeNode* root1,TreeNode* root2)
{
queue<TreeNode*> que;
que.push(root1);
que.push(root2);
TreeNode* node1;
TreeNode* node2;
while(!que.empty())
{
node1 = que.front();
que.pop();
node2 = que.front();
que.pop();
if(!node1 && !node2)
continue;
if((!node1 || !node2) || node1->val != node2->val)
return false;
que.push(node1->left);
que.push(node2->right);
que.push(node1->right);
que.push(node2->left);
}
return true;
}
public:
bool isSymmetric(TreeNode* root) {
return check(root,root);
}
};