Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1 / 2 2 / / 3 4 4 3
But the following is not:
1 / 2 2 3 3
思路:判断树是否是对称的 递归判断即可
class Solution { public: bool isSymmetric(TreeNode* root) { if(NULL == root) return true; TreeNode * L = root->left; TreeNode * R = root->right; return isSymmetricPart(L, R); } bool isSymmetricPart(TreeNode* L, TreeNode* R) { if(NULL == L && NULL == R) return true; if(NULL == L && NULL != R || NULL == R && NULL != L) return false; if(L->val == R->val) return isSymmetricPart(L->left, R->right) && isSymmetricPart(L->right, R->left); else return false; } };
更简短的写法
class Solution { public: bool isSymmetric(TreeNode* root) { return !root ? true : isSymmetricHelper(root->left, root->right); } bool isSymmetricHelper(TreeNode* left, TreeNode* right) { if (!left && !right) { return true; } return (left && right) && (left->val == right->val) && isSymmetricHelper(left->left, right->right) && isSymmetricHelper(left->right, right->left); } };