5.1.7 Symmetric Tree

ifficulty: Easy
  Source: http://leetcode.com/onlinejudge#question_101
  Notes:
  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
  Note:
  Bonus points if you could solve it both recursively and iteratively.
 
  Solution: 1. Recursive solution 2.Iterative way (queue).
  */
  /**
  * Definition for binary tree
  * struct TreeNode {
  * int val;
  * TreeNode *left;
  * TreeNode *right;
  * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  * };
  */
class Solution {
public:
    bool isSymmetric(TreeNode *root) {
        return isSymmetric_2(root);
    }
    bool isSymmetric_1(TreeNode *root) {
        if (root == NULL) return true;
        return solve (root->left, root->right);
    }
    bool solve(TreeNode * t1, TreeNode * t2) {
        if (!t1 && !t2) return true;
        if (!t1 && t2 || t1 && !t2 || t1->val != t2->val) return false;
        return solve(t1->left, t2->right) && solve(t1->right, t2->left);
    }
};


你可能感兴趣的:(5.1.7 Symmetric Tree)