101. Symmetric Tree

来源:互联网 发布:2017英国大学 知乎 编辑:程序博客网 时间:2024/06/04 18:27

题目:

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

    1   / \  2   2 / \ / \3  4 4  3

But the following [1,2,2,null,3,null,3] is not:

    1   / \  2   2   \   \   3    3

Note:
Bonus points if you could solve it both recursively and iteratively.

代码及易错点:

/** * 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:    //use recursion      bool isSymmetric(TreeNode* root) {        return root == NULL || help(root->left, root->right);    }    bool help(TreeNode* r1, TreeNode* r2){        if(r1 == NULL || r2 == NULL)//这两行很巧妙要注意运用。        return r1 == r2;        if(r1->val !=r2->val)return false;        return help(r1->left, r2->right) && help(r1->right, r2->left);    }        // use stack    bool isSymmetric(TreeNode* root) {        if(root == NULL)return true;        //if((root->left == NULL || root->right == NULL) && root->left != root->right) return false;        stack<TreeNode*> s;        s.push(root->left);        s.push(root->right);        TreeNode* lv;        TreeNode* rv;        while(!s.empty()){            lv = s.top();            s.pop();            rv = s.top();            s.pop();            if(lv == NULL && rv == NULL ) continue;//注意 这里不能用 if(r1 == NULL || r2 == NULL)  return r1 == r2;            if(lv == NULL || rv == NULL) return false;            else{                if(lv->val != rv->val) return false;                s.push(lv->right);                s.push(rv->left);                s.push(lv->left);                s.push(rv->right);            }                    }        return true;    }};


0 0