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 3But the following is not:
1 / \ 2 2 \ \ 3 3Note:
Bonus points if you could solve it both recursively and iteratively.
循环地解可以用两个队列分别存储left和right的节点,这里用了递归来解。
关键是把isSymmetric变成isSame,然后进行递归求解。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isSymmetric(TreeNode* root) { if(root == NULL){ return true; } return isSame(root->left, root->right); } bool isSame(TreeNode * a, TreeNode * b){ if(a == NULL && b == NULL){ return true; } else if(a == NULL || b == NULL){ return false; } else{ if(a->val != b->val){ return false; } else{ return isSame(a->left, b->left) && isSame(a->right, b->right); } } } };