思路
递归
递归很好写
迭代
一开始我没有想到用队列去存储节点。其实,如果要以一层一层的顺序去考虑树,那么一般情况下使用队列。如果要优先考虑左子树或者右子树,一般用stack存储节点。
代码
递归
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if (!root) return true;
return isSymmetric(root->left, root->right);
}
bool isSymmetric(TreeNode *left, TreeNode* right) {
if (!left && !right) return true;
else if (left && right && left->val == right->val) {
return isSymmetric(left->left, right->right) && isSymmetric(left->right, right->left);
}
else return false;
}
};
迭代
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if (!root) return true;
queue<TreeNode*> qu;
TreeNode *left, *right;
qu.push(root->left);
qu.push(root->right);
while (!qu.empty()) {
left = qu.front();
qu.pop();
right = qu.front();
qu.pop();
if (!left && !right) continue;
else if (left && right && left->val == right->val) {
qu.push(left->left);
qu.push(right->right);
qu.push(left->right);
qu.push(right->left);
}
else return false;
}
return true;
}
};