zoukankan      html  css  js  c++  java
  • 二叉树--对称二叉树(leetcode 101

    递归

        public boolean check(TreeNode p, TreeNode q){
            if (p == null && q == null){
                return true;
            }
            if (p == null || q == null){
                return false;
            }
    
            return p.val == q.val && check(p.left, q.right) && check(p.right,q.left);
    
        }
    
        public boolean isSymmetric(TreeNode root) {
            return check(root, root);
        }
    

    时空间复杂度都是o(n)


    迭代

    引入一个队列,这是把递归程序改写成迭代程序的常用方法。初始化时把根节点入队两次。每次提取两个结点并比较它们的值(队列中每两个连续的结点应该是相等的,而且它们的子树互为镜像),然后将两个结点的左右子结点按相反的顺序插入队列中。当队列为空时,或者检测到树不对称(即从队列中取出两个不相等的连续结点)时,该算法结束。

        public boolean isSymmetric(TreeNode root) {
            if (root == null){
                return true;
            }
            Queue<TreeNode> queue = new LinkedList<TreeNode> ();
            queue.offer(root);
            queue.offer(root);
    
            while (!queue.isEmpty()) {
                TreeNode temp1 = queue.poll();
                TreeNode temp2 = queue.poll();
    
                if (temp1 == null && temp2 == null){
                    continue;
                }
    
                if ((temp1 == null || temp2 == null) || (temp1.val != temp2.val)){
                    return false;
                }
    
                queue.offer(temp1.left);
                queue.offer(temp2.right);
    
                queue.offer(temp1.right);
                queue.offer(temp2.left);
    
            }
            return true;
        }
    

    时空间复杂度都是o(n)

  • 相关阅读:
    Codefores 506A Mr. Kitayuta, the Treasure Hunter( DP && dfs )
    Goals ? Ideals ?
    HDU 5159 Card( 计数 期望 )
    HDU 1387 Team Queue( 单向链表 )
    HDU 1709 The Balance( DP )
    HDU 2152 Fruit( DP )
    HDU 1398 Square Coins(DP)
    HDU 5155 Harry And Magic Box( DP )
    HDU 3571 N-dimensional Sphere( 高斯消元+ 同余 )
    最大连续自序列
  • 原文地址:https://www.cnblogs.com/swifthao/p/13274575.html
Copyright © 2011-2022 走看看