leecode第一百零一题(对称二叉树)

/**
 * 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:
    void digui(TreeNode* root_a,TreeNode* root_b,bool &result){  
        if(root_a==NULL&&root_b==NULL)//先看看是否都是NULL
            return;
        if((root_a==NULL&&root_b!=NULL)||
           (root_a!=NULL&&root_b==NULL)||
           (root_a->val!=root_b->val))//如果两边只有一边是NULL或者两边值不等,就返回不行
        {
            result=false;
            return;
        }
            
        
        digui(root_a->left,root_b->right,result);
        if(!result)//我想早点返回
            return;
        digui(root_a->right,root_b->left,result);
    }
    
    bool diedai(TreeNode* root)
    {
        queue<TreeNode*> temp;//使用队列结构
        temp.push(root);
        temp.push(root);
        bool result=true;
        while(!(temp.empty())&&result)//停止条件:队列为空或有不满足条件的时候
        {
            TreeNode* node_a=temp.front();//提取头两个节点
            temp.pop();
            TreeNode* node_b=temp.front();
            temp.pop();
            
            if(node_a==NULL&&node_b==NULL)//检查两个节点是否同时为NULL
                continue;
            else if(node_a==NULL||node_b==NULL)
            {
                result=false;
                continue;
            }
            else if(node_a->val!=node_b->val)//检查两个节点值是否相等
                result=false;
            
            temp.push(node_a->left);//然后吧左右孩子分别对应压入队列
            temp.push(node_b->right);
            temp.push(node_a->right);
            temp.push(node_b->left);
        }
        return result;
    }
    
    bool isSymmetric(TreeNode* root) {
        //diedai
        return diedai(root);
        //digui 
        bool result=true;
        digui(root,root,result);
        return result;
    }
};

分析:

还是得动脑子、

posted @ 2019-07-20 09:36  深夜十二点三十三  阅读(129)  评论(0编辑  收藏  举报