HappyLeetcode43:Symmetric Tree

來源:互聯網
上載者:User

標籤:

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

HappyLeetcode43:Symmetric Tree

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.