例如,二叉树 [1,2,2,3,4,4,3]
是对称的。
1 / \ 2 2 / \ / \ 3 4 4 3
但是下面这个 [1,2,2,null,3,null,3]
则不是镜像对称的:
1 / \ 2 2 \ \ 3 3
说明:
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
递归实现
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if (root == NULL)
return true;
return fun(root->left, root->right);
}
private:
bool fun(TreeNode* left, TreeNode* right)
{
if (left == NULL && right == NULL)
return true;
if (left == NULL && right != NULL || left != NULL && right == NULL || left->val != right->val)
return false;
return fun(left->right, right->left) && fun(left->left, right->right);
//左子树的右子树-右子树的左子树 左子树的左子树-右子树的右子树
}
};
迭代实现(借助栈)
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root==NULL) return true;
stack<TreeNode*> S1;
stack<TreeNode*> S2;
TreeNode* left =root->left;
TreeNode* right=root->right;
S1.push(left);
S2.push(right);
while(!S1.empty() && !S2.empty())
{
left =S1.top(); S1.pop();
right=S2.top(); S2.pop();
if(left==NULL && right==NULL)
continue;
if(left!=NULL && right==NULL || left==NULL && right!=NULL ||left->val != right->val )
{
return false;
}
else
{
S1.push(left->right);S2.push(right->left);
S1.push(left->left); S2.push(right->right);
}
}
return true;
}
};