zoukankan      html  css  js  c++  java
  • 剑指offer 判断树是不是对称的

    剑指offer 判断树是不是对称的

    递归是很常见的实现方式,最简便。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    class Solution {
    public:
        bool isSymmetrical(TreeNode* pRoot)
        {
            if(!pRoot) return true;
            return compRoot(pRoot -> left, pRoot -> right);
        }
        //递归方法
        bool compRoot(TreeNode* lroot, TreeNode* rroot){
            if(!lroot) return (NULL == rroot);
            if(NULL == rroot) return false;
            if(lroot -> val != rroot -> val) return false;
            return (compRoot(lroot -> left, rroot -> right) && compRoot(lroot -> right, rroot -> left));
        }
     
     
    };

    迭代版本
    使用栈stack

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    class Solution {
    public:
        bool isSymmetrical(TreeNode* pRoot)
        {
            if(pRoot==NULL)return true;
            stack<TreeNode *> s;
            s.push(pRoot->left);
            s.push(pRoot->right);
            while(!s.empty()){
                auto p=s.top();s.pop();
                auto q=s.top();s.pop();
                if(!p && !q)continue; //p,q都是NULL,则继续
                if(!p || !q)return false; // p,q中有一个是null,另一个不是,false
                if(p->val !=q->val)return false; // p,q都不是null,但是值不相等,false
                 
                s.push(p->left);
                s.push(q->right);
                 
                s.push(p->right);
                s.push(q->left);               
            }       
            return true;
        }
    };








  • 相关阅读:
    Sql题目精选练习
    SqlServer2008数据库的备份与还原
    SqlServer视图介绍以及创建方式
    Java反射详解
    for(foo('a') ; foo('b') && (i<2);foo('c'))的执行结果
    jdk与jre与jdk都是干什么的有什么区别和jvm详解:
    List去重为什么要写equals(),hashCode()方法
    String类的常用方法以及知识点总结
    o enclosing instance of type ArrayList_day02 is accessible. Must qualify the allocation with an enclosing instance of type ArrayList_day02
    JAVA整理01--面向对象基础
  • 原文地址:https://www.cnblogs.com/zhxshseu/p/5285096.html
Copyright © 2011-2022 走看看