Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).
Example 1:

Input: root = [1,2,2,3,4,4,3] Output: true
Example 2:

Input: root = [1,2,2,null,3,null,3] Output: false
Constraints:
[1, 1000].-100 <= Node.val <= 100
Follow up: Could you solve it both recursively and iteratively?
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
- * };
- */
递归
- class Solution {
- public:
- bool isSymmetric(TreeNode* root) {
- return root
- ? subtreeSymmetric(root->left,root->right)
- : true;
- }
- bool subtreeSymmetric(TreeNode* root1, TreeNode* root2){
- if (!root1 && !root2) {return true;}
- else if (root1 && root2 && (root1->val == root2->val)){
- return subtreeSymmetric(root1->left,root2->right)
- && subtreeSymmetric(root1->right,root2->left);
- } else {return false;}
- }
- };
分步走,更清晰
- class Solution {
- public:
- bool isSymmetric(TreeNode* root) {
- return root
- ? subtreeSymmetric(root->left,root->right)
- : true;
- }
- bool subtreeSymmetric(TreeNode* root1, TreeNode* root2){
- if (!root1 && !root2) {
- return true;
- }
- if (!root1 || !root2) {
- return false;
- }
- if (root1->val != root2->val) {
- return false;
- }
- return subtreeSymmetric(root1->left,root2->right)
- && subtreeSymmetric(root1->right,root2->left);
- }
- };
- /**
- * Definition for a binary tree node.
- * public class TreeNode {
- * int val;
- * TreeNode left;
- * TreeNode right;
- * TreeNode() {}
- * TreeNode(int val) { this.val = val; }
- * TreeNode(int val, TreeNode left, TreeNode right) {
- * this.val = val;
- * this.left = left;
- * this.right = right;
- * }
- * }
- */
- class Solution {
- public boolean isSymmetric(TreeNode root) {
- return root != null
- ? subtreeSymmetric(root.left, root.right)
- : true;
- }
- boolean subtreeSymmetric(TreeNode root1, TreeNode root2){
- if (root1 == null && root2 == null) {return true;}
- else if (root1 != null
- && root2 != null
- && (root1.val == root2.val)) {
- return subtreeSymmetric(root1.left,root2.right)
- && subtreeSymmetric(root1.right,root2.left);
- } else {return false;}
- }
- }