/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: bool isSymmetrical(TreeNode* pRoot) { if (pRoot == NULL) return true; return cmp(pRoot->left, pRoot->right); } bool cmp(TreeNode* left, TreeNode* right) { if (left && right == NULL) return false; else if (left == NULL && right) return false; else if (left == NULL && right == NULL) return true; else if (left->val != right->val) return false; bool outside = cmp(left->left, right->right); // 左子树的外侧,右子树的外侧 bool inside = cmp(left->right, right->left); // 左子树的内侧,右子树的内侧 return outside && inside; } };