zoukankan      html  css  js  c++  java
  • OJ练习22——T101 Symmetric Tree

    判断一颗二叉树是否是镜面(即轴对称)。

    Leecode表示二叉树:

    {1,#,2,3}

    是层次遍历的结果,#表示节点为空。

    【思路】

    1.我的思路,镜面树一个特征,把左树的左右孩子都交换,就和右树完全一样。

    所以另写两个函数,都使用递归,一个是判断两树是否相等。

    2.别人的思路,用一个树的左树比较另一棵树的右树,右树比较左树(虽然很容易想到,但不太会实现递归)

    bool isSymmetric(TreeNode *root) {
            if(root==NULL)
                return true;
            trans(root->left);
            return isSameTree(root->left,root->right);
        }
        void trans(TreeNode *root)
        {
            if(root&&(root->left||root->right))
            {
                TreeNode *temp=root->left;
                root->left=root->right;
                root->right=temp;
                trans(root->left);
                trans(root->right);
            }
            else return;
        }
        bool isSameTree(TreeNode *p, TreeNode *q)
        {
            if(!( (p && q && p->val==q->val) || (p==NULL && q==NULL))) return false;
            if(p==NULL || q==NULL) return true;
            return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
        }

    【other code】

    bool dfs(TreeNode *left,TreeNode *right)
        {
            if(!left && !right) return true;//需要先判断这个,不然val那个可能会出现RE
            if((left && !right) || (!left && right) || (left->val!=right->val)) return false;
            return dfs(left->left,right->right) && dfs(left->right,right->left);
        }
        bool isSymmetric(TreeNode *root) {
            if(root==NULL || (!root->left && !root->right)) return true;
            return dfs(root->left,root->right);
        }

    【评价】

    看人家的代码还是漂亮些,其实dfs还是判断两树是否相等。

    我的那个trans还是写的挺好的O(∩_∩)O哈哈~

  • 相关阅读:
    七月在线爬虫班学习笔记(五)——scrapy spider的几种爬取方式
    七月在线爬虫班学习笔记(四)——相关库使用与登录问题
    七月在线爬虫班学习笔记(三)——爬虫基础知识与简易爬虫实现
    文件处理工具类
    执行脚本工具类
    LRU
    springboot 整合 memcached
    转载连接
    SpringBoot2.x中redis使用(lettuce)
    Redis 数据类型
  • 原文地址:https://www.cnblogs.com/ketchups-notes/p/4443650.html
Copyright © 2011-2022 走看看