方法一,使用递归,时间O(n),空间O(logN)。代码如下:
class Solution {
public:
bool isSymmetric(TreeNode *root) {
if(root == NULL)
return true;
else return isSymmetric(root->left, root->right);
}
bool isSymmetric(TreeNode *left, TreeNode *right)
{
if(!left && !right) return true;
if(!left || !right) return false;
return (left->val == right->val)
&& isSymmetric(left->left, right->right)
&& isSymmetric(left->right, right->left);
}
};
方法二,使用迭代,时间O(n),空间O(logN)。代码如下,注意进栈顺序。
class Solution {
public:
bool isSymmetric(TreeNode *root) {
if(!root) return true;
stack<TreeNode*> s;
s.push(root->left);
s.push(root->right);
TreeNode *left, *right;
while(!s.empty())
{
left = s.top(); s.pop();
right= s.top(); s.pop();
if(!left && !right) continue;
if(!left || !right) return false;
if(left->val != right->val) return false;
s.push(left->left);
s.push(right->right);
s.push(left->right);
s.push(right->left);
}
return true;
}
};