Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
Note:
Bonus points if you could solve it both recursively and iteratively.
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool compare(struct TreeNode* Tleft,struct TreeNode* Tright){
if(Tleft->val != Tright->val ) return false;
if(Tleft->left && !Tright->right || !Tleft->left && Tright->right || Tleft->right && !Tright->left ||!Tleft->right && Tright->left) return false;
if(Tleft->left && Tright->right ) if(!compare(Tleft->left,Tright->right)) return false;
if(Tleft->right && Tright->left ) if(!compare(Tleft->right,Tright->left)) return false;
return true;
}
bool isSymmetric(struct TreeNode* root) {
if(!root) return true;
if(!root->left && !root->right) return true;
if(root->left && root->right) return compare(root->left,root->right);
else return false;
}
根节点单独判断,后面的只需要判断左子树的左子树和右子树的右子树以及左子树的右子树和右子树的左子树即可。