zoukankan      html  css  js  c++  java
  • 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;
        }
    };

    分析:

    还是得动脑子、

  • 相关阅读:
    [HNOI 2009] 有趣的数列
    [HAOI2015] 树上染色
    [BZOJ 2654] tree
    【图论 搜索】bzoj1064: [Noi2008]假面舞会
    【倍增】7.11fusion
    【二分 贪心】bzoj3477: [Usaco2014 Mar]Sabotage
    【计数】7.11跳棋
    概述「贪心“反悔”策略」模型
    复习计划里的低级错误
    【模拟】bzoj1686: [Usaco2005 Open]Waves 波纹
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/11216677.html
Copyright © 2011-2022 走看看