题目:
给你一个二叉树的根节点 root
, 检查它是否轴对称。
方法:本体可以用递归和迭代两种方法,但我更喜欢迭代的方式,因此使用迭代的方式做一下。首先我们分析一下不对称的情况。因为对称的情况很简单,即两个节点相等,同时为空或者是同时不为空且数值相等。不对称的情况可能有以下几种:一边为空,另一边不为空;两边都不为空但数值不相等。因此我们可以将需要比对的节点按照顺序放入队列中,并用树的节点指针取出需要比对的节点,依次按照我们上面描述的几种情况判断是否对称,随后将左子树的左节点,右子树的右节点,左子树的右节点和右子树的左节点按照顺序放入队列中,等待着进行下一轮的比对。
题解:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root == NULL) return true; //根节点为空是对称的
queue<TreeNode*> que;
que.push(root->left); //根的左子树入队
que.push(root->right); //根的右子树入队
while(!que.empty()){
TreeNode* leftNode = que.front(); que.pop();
TreeNode* rightNode = que.front(); que.pop();
if (!leftNode && !rightNode) { //左右节点同时为空,算对称的
continue;
}
if((!leftNode || !rightNode || (leftNode->val != rightNode->val))){
return false;
}
que.push(leftNode->left); //左子树的左节点
que.push(rightNode->right); //右子树的右节点
que.push(leftNode->right); //左子树的右节点
que.push(rightNode->left); //右子树的左节点
}
return true;
}
};