1. 程式人生 > >101. 對稱二叉樹

101. 對稱二叉樹

題目

程式碼

/**
 * 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:
    bool isSymmetric(TreeNode* root) {
        // return isMirror(root,root);
        list<TreeNode*> que;
        que.push_back(root);
        que.push_back(root);
        while(que.empty()==false)
        {
            auto t1=que.front();
            que.pop_front();
            auto t2=que.front();
            que.pop_front();
            if (t1 == nullptr && t2 == nullptr) continue;
            if (t1 == nullptr || t2 == nullptr) return false;
            if (t1->val != t2->val) return false;
            que.push_back(t1->left);
            que.push_back(t2->right);
            que.push_back(t1->right);
            que.push_back(t2->left);
        }
        return true;
    }
    //這是遞迴的方法
//     bool isMirror(TreeNode* left,TreeNode* right)
//     {
//        if(left==nullptr&&right==nullptr) return true; 
//        if(left==nullptr||right==nullptr) return false;
        
//        return (left->val==right->val)&&isMirror(left->right,right->left)&&isMirror(left->left,right->right);
//     }
};

思路

迭代的方法,用list儲存值,每次壓入兩個節點的左孩子和右孩子,取出的時候進行判斷即可;遞迴的方法每次放入的是節點的左邊對應另一個節點的右邊。