(LeetCode 101) 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 

題意就是問一個二叉樹是不是對稱的。

solution:
直接使用廣度搜索就可以解決了
迭代,我覺得,我的代碼好像,有點長…
後面有彩蛋(遞歸版)

class Solution {
public:
    queue<TreeNode> pleft;
    queue<TreeNode> pright;
    bool isSymmetric(TreeNode* root) {
        if(root==NULL)return true;
        pleft.push(*root);
        pright.push(*root);
        while(!pleft.empty()||!pright.empty()){
            TreeNode tempLeft = pleft.front();
            TreeNode tempRight = pright.front();
            pleft.pop();
            pright.pop();
            TreeNode *Lleft =tempLeft.left;
            TreeNode *Lright = tempLeft.right;
            TreeNode *Rleft = tempRight.left;
            TreeNode *Rright = tempRight.right;
            if((Lleft!=NULL&&Rright==NULL)||(Lleft==NULL&&Rright!=NULL))return false;
            if((Lright!=NULL&&Rleft==NULL)||(Lright==NULL&&Rleft!=NULL))return false;
            if(Lleft!=NULL){
                if(Lleft->val!=Rright->val)return false;
                pleft.push(*Lleft);
                pright.push(*Rright);
            }
            if(Lright!=NULL){
                if(Lright->val!=Rleft->val)return false;
                pleft.push(*Lright);
                pright.push(*Rleft);
            }
        }
        if(pleft.empty()&&pright.empty())return true;
        return false;
    }
};

翻到這裏看的都是好孩子

class Solution {
public:

    bool isSymmetric(TreeNode* root) {
        if(root==NULL)return true;
        return test(root->left,root->right);
    }

    bool test(TreeNode *left,TreeNode *right){
        if(left==NULL&&right==NULL)return true;
        if(left!=NULL&&right!=NULL&&left->val==right->val){
            return test(left->left,right->right)&&test(left->right,right->left);
        }else return false;
    }
};
發佈了45 篇原創文章 · 獲贊 15 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章