HappyLeetcode43:Symmetric Tree

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
 
 
这道题目可以用迭代的方式做,也可以用递归的方式做。遇见和树相关的题目,第一反应是递归,所以我的解法是递归。
代码奉上:
class Solution {
 public:
     bool IsSymmetric(TreeNode *node1, TreeNode *node2)
     {
         if (node1 == NULL&&node2 == NULL)
             return true;
         if (node1 == NULL||node2 == NULL)
             return false;
         bool result1, result2;
         if (node1->val != node2->val)
             return false;
         else
         {
             result1 = IsSymmetric(node1->left, node2->right);
             result2 = IsSymmetric(node1->right, node2->left);
         }
         return result1&&result2;
     }
     bool isSymmetric(TreeNode *root) {
         if (root == NULL || root->left == NULL&&root->right == NULL)
             return true;
         bool result = IsSymmetric(root->left, root->right);
         return result;
     }
 };

看了相关人的解法,有的人直接用迭代的方式解出来了,感觉很受启发

/**
 * 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) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
        if(root == NULL)return true;
        queue<TreeNode*> qleft, qright;
        if(root->left)qleft.push(root->left);
        if(root->right)qright.push(root->right);
        while(qleft.empty() == false && qright.empty() == false)
        {
            TreeNode *ql = qleft.front();
            TreeNode *qr = qright.front();
            qleft.pop();  qright.pop();
            if(ql->val == qr->val)
            {
                if(ql->left && qr->right)
                {
                    qleft.push(ql->left);
                    qright.push(qr->right);
                }
                else if(ql->left || qr->right)
                    return false;
                if(qr->left && ql->right)
                {
                    qleft.push(qr->left);
                    qright.push(ql->right);
                }
                else if(qr->left || ql->right)
                    return false;
            }
            else return false;
        }
        if(qleft.empty() && qright.empty())
            return true;
        else return false;
    }
};

转自http://www.cnblogs.com/TenosDoIt/p/3440729.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。