题目:
给你一个二叉树的根节点 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;}
};