zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    常吃二十种降血脂食物,三高不再缠身
    员工能力要从“人海战术”转向“精兵强将”
    企业家必备的4项核心能力
    优秀管理者在哪些方面超乎常人
    高血压 降压方法
    教育视频
    吉他和弦 学习
    spoj 375 QTREE
    hihocoder #1260 : String Problem I
    codeforces 282E. Sausage Maximization Trie
  • 原文地址:https://www.cnblogs.com/chengxuyuanxiaowang/p/4219870.html
Copyright © 2011-2022 走看看