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;
        }
    };








  • 相关阅读:
    PHP 如何安全的使用 MySQL ?
    IntelliJ IDEA 内存优化最佳实践
    当我们在谈论 DevOps,我们在谈论什么?
    第84节:Java中的网络编程(中)
    Java工程师必备
    Java工程师必备
    第83节:Java中的学生管理系统分页功能
    第83节:Java中的学生管理系统分页功能
    第82节:Java中的学生管理系统
    第82节:Java中的学生管理系统
  • 原文地址:https://www.cnblogs.com/zhxshseu/p/5285096.html
Copyright © 2011-2022 走看看