zoukankan      html  css  js  c++  java
  • Symmetric Tree 之 ArrayDeque,LinkedList 使用区别

    本人写代码,无论是用到栈结构,队列结构,都习惯用deque,因为deque支持在头部和尾部插入或删除元素。

    但deque有 ArrayDeque 和 LinkedList 两种框架。

    主要区别在于LinkedList支持插入null元素

    这在下面这道leetcode题Symmetric Tree得以运用。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public boolean isSymmetric(TreeNode root) {
            Deque<TreeNode> queue = new LinkedList<>();//允许插入null
            queue.addLast(root);
            queue.addLast(root);
            while(!queue.isEmpty()){
                TreeNode t1 = queue.removeFirst();
                TreeNode t2 = queue.removeFirst();
                if(t1 == null && t2 == null) continue;
                if(t1 == null || t2 == null) return false;
                if(t1.val != t2.val) return false;
                queue.addLast(t1.left);//可能为null
                queue.addLast(t2.right);
                queue.addLast(t1.right);
                queue.addLast(t2.left);
            }
            return true;
        }
    }

    ArrayDeque基于 循环数组 实现

    LinkedList基于 双向链表 实现

    PriorityQueue基于 最小堆(完全二叉树) 实现

    ArrayDeque:双端队列,线程不安全,性能高于LinkedList,不允许插入null元素

    LinkedList:双端队列,线程不安全,首尾元素操作效率高,低效随机访问

    PriorityQueue:线程不安全,不允许插入null元素,动态数组实现最小堆,remove方法一直返回最小元素

  • 相关阅读:
    map映射的用法
    相似的字串(hash+二分)
    进制 /字符串 hash
    CF#632 C.Eugene and an array
    2020牛客寒假算法基础集训营6 H-云
    Educational Codeforces Round 80 (Div. 2)
    Codeforces Round #601 (Div. 2)补题
    luogu-单调队列/单调栈专题
    Comet OJ
    Comet OJ
  • 原文地址:https://www.cnblogs.com/yawenw/p/12881592.html
Copyright © 2011-2022 走看看