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

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

  • 相关阅读:
    X-Windows桌面
    scp命令详解
    LaTeX排版工具使用
    HTML5的在线视频播放方案
    开源软件大集合
    Linux下视频转换工具:转换,切割,连接,
    互联网产品经理常用软件及工作平台
    centos7安装VLC播放器
    2014年基于Raspberry Pi的5大项目
    天虎科技:全国智能硬件投融资情况大盘点
  • 原文地址:https://www.cnblogs.com/flix/p/12459477.html
Copyright © 2011-2022 走看看