• 101. Symmetric Tree


    题目:

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

    For example, this binary tree is symmetric:

        1
       / 
      2   2
     /  / 
    3  4 4  3
    

    But the following is not:

        1
       / 
      2   2
          
       3    3
    

    Note:
    Bonus points if you could solve it both recursively and iteratively.

    confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

    Hide Tags
     Tree Depth-first Search
     

    链接:http://leetcode.com/submissions/detail/11328058/

    题解:

    DFS。

    Time Complexity - O(n), Space Complexity - O(1)。

    public class Solution {
        public boolean isSymmetric(TreeNode root) {
            if(root == null)
                return true;
            else
                return isSymmetric(root.left, root.right);
        }
        
        private boolean isSymmetric(TreeNode left, TreeNode right){
            if(left == null && right == null)
                return true;
            if(left != null && right != null && left.val == right.val)
                return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
            else
                return false;
        }
    }

    Update:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public boolean isSymmetric(TreeNode root) {
            if(root == null)
                return true;
            return isSymmetric(root.left, root.right);
        }
        
        private boolean isSymmetric(TreeNode left, TreeNode right) {
            if(left == null && right == null)
                return true;
            else if (left == null || right == null)
                return false;
            else if(left.val != right.val)
                return false;
            else
                return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
        }
    }

    二刷:

    还是使用recursive方法比较简单。就是做一个辅助方法,比较root.left和root.right,以及接下来的root.left的子节点和root.right的子节点。

    其他方法也可以用in-order traversal, level-order traversal等等。

    Java:

    Time Complexity - O(n), Space Complexity - O(n)。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public boolean isSymmetric(TreeNode root) {
            if (root == null) {
                return true;
            }
            return isSymmetric(root.left, root.right);
        }
        
        private boolean isSymmetric(TreeNode left, TreeNode right) {
            if (left == null || right == null) {
                return left == null && right == null;
            }
            if (left.val != right.val) {
                return false;
            }
            return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
        }
    }

    三刷:

    Java:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public boolean isSymmetric(TreeNode root) {
            if (root == null) {
                return true;
            }
            return isSymmetric(root.left, root.right);
        }
        
        private boolean isSymmetric(TreeNode left, TreeNode right) {
            if (left == null || right == null) {
                return left == right;
            }
            if (left.val == right.val) {
                return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
            }
            return false;
        }
    }

    Reference:

    https://leetcode.com/discuss/19859/slim-java-solution

  • 相关阅读:
    Gym 101149I: It's the Police (图,思维)
    把ORM封装成一个类(linq to entity)
    jquery跨域,getJson跨域解决方案
    Jquery中AJAX参数详细列表:
    Multipart forms from C# client
    “ThreadPool 对象中没有足够的自由线程来完成操作”的现象和解决办法
    .NET垃圾回收 问题、建议
    C# HttpWebRequest保存cookies模拟登录的方法
    基础连接已经关闭:服务器关闭了本应保持活动状态的连接 解决方法
    C# 模拟上传图片
  • 原文地址:https://www.cnblogs.com/yrbbest/p/4437180.html
Copyright © 2020-2023  润新知