Loading

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存储值,每次压入两个节点的左孩子和右孩子,取出的时候进行判断即可;递归的方法每次放入的是节点的左边对应另一个节点的右边。

posted @ 2018-09-15 08:28  李正浩  阅读(84)  评论(0编辑  收藏  举报