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哈哈~

  • 相关阅读:
    java注解实例-反射生成sql
    应用服务器集群的伸缩性设计
    高可用的服务
    应用服务器集群Session管理
    应用服务器性能优化 (存储性能优化)
    应用服务器性能优化 (代码优化)
    应用服务器性能优化 (使用集群)
    应用服务器性能优化 (异步操作)
    应用服务器性能优化 (分布式缓存)
    Web前端性能优化(CDN加速及反向代理)
  • 原文地址:https://www.cnblogs.com/ketchups-notes/p/4443650.html
Copyright © 2011-2022 走看看