• LeetCode


    题目:

    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.

    思路:

    1) 递归

    package tree;
    
    public class SymmetricTree {
    
        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;
            if (left == null || right == null) return false;
            return left.val == right.val && isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
        }
    
    }

    2) 迭代

    package tree;
    
    import java.util.Stack;
    
    public class SymmetricTree {
    
        public boolean isSymmetric(TreeNode root) {
            if (root == null) return true;
            Stack<TreeNode> stack1 = new Stack<TreeNode>();
            Stack<TreeNode> stack2 = new Stack<TreeNode>();
            TreeNode p = root.left;
            TreeNode q = root.right;
            while ((p != null && q != null) || (!stack1.isEmpty() && !stack2.isEmpty())) {
                while (p != null && q != null) {
                    stack1.push(p);
                    p = p.left;
                    stack2.push(q);
                    q = q.right;
                } 
                
                if (p != null || q != null) return false;
                
                if (stack1.isEmpty() && stack1.isEmpty()) return true;
                if (stack1.isEmpty() || stack1.isEmpty()) return false;
                
                TreeNode node1 = stack1.pop();
                TreeNode node2 = stack2.pop();
                if (node1.val != node2.val) return false;
                p = node1.right;
                q = node2.left;            
            }
            
            return p == null && q == null && stack1.isEmpty() && stack2.isEmpty();
        }
        
    }
  • 相关阅读:
    mysql 创建数据库 添加用户 数据库授权给某用户
    Storm近年的发展
    Doris 最佳实践-Compaction调优
    pickle,struct,ujson,orjson 模块
    python用prettytable输出漂亮的表格
    nginx自定义访问日志
    事务 知识点梳理
    14
    13
    8
  • 原文地址:https://www.cnblogs.com/null00/p/5117866.html
Copyright © 2020-2023  润新知