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方法一直返回最小元素

  • 相关阅读:
    ActiveForm
    phpstudy配置虚拟主机
    PHP 二分查找
    mysql group by 用法解析(详细)
    Linux(CentOS)下的apache服务器配置与管理
    ubuntu server sudo出现sudo:must be setuid root 完美解决办法
    VB连接MYSQL数据的方法
    mysql 远程登录及常用命令
    在eclipse上搭建Roku开发环境
    linux ps查进程 kill关闭进程
  • 原文地址:https://www.cnblogs.com/yawenw/p/12881592.html
Copyright © 2011-2022 走看看