zoukankan      html  css  js  c++  java
  • 【剑指Offer-画图让抽象问题形象化】面试题28:对称的二叉树

    题目描述

    请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

    思路

    前序遍历的顺序是根结点、左子节点、右子结点。把顺序为根结点、右子结点、左子节点的遍历称为“反前序遍历”。如果一棵树的前序遍历序列和反前序遍历序列相同,那么这棵树就是对称的。代码如下:

    /*
    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==nullptr)
                return true;
            
            return check(pRoot, pRoot);
        }
        
        bool check(TreeNode* pRoot1, TreeNode* pRoot2)
        {
            if(pRoot1==nullptr && pRoot2==nullptr)
                return true;
            if(pRoot1==nullptr || pRoot2==nullptr)
                return false;
            if(pRoot1->val!=pRoot2->val)
                return false;
            
            return check(pRoot1->left, pRoot2->right) && check(pRoot1->right, pRoot2->left);
        }
    
    };
    

    这是书上的代码,但是感觉并没有用到前序遍历序列和反前序遍历序列是否相同来判断,而是根据树的对称线来对比相应位置的左右节点是否相同,代码写的很好很简洁,值得细细琢磨。

  • 相关阅读:
    Redis持久化之RDB
    linux中查看进程中的线程
    Redis客户端
    Redis之GEO
    Redis之发布订阅
    Redis之HyperLogLog
    CSP-S2020游记
    根据表名 查询 表的列,备注,类型等 SQL
    mybatis-plus的使用 ------ 入门
    IntelliJ IDEA 版本控制(svn、git) 修改文件后,所属目录的颜色也变化
  • 原文地址:https://www.cnblogs.com/flix/p/12459477.html
Copyright © 2011-2022 走看看