二分搜索树实现Java的Map(下)
二分搜索树Map
public class BSTMap<K extends Comparable<K>,V> implements Map<K,V> { private class Node
{
public K key; public V value; public Node left,right; public Node(K key,V value)
{
this.key = key;
this.value = value;
left = null;
right = null;
}
} private Node root; private int size; public BSTMap()
{
root = null;
size = 0;
}
@Override
public void add(K key, V value) {
root = add(root,key,value);
} private Node add(Node node,K key,V value)
{
if (node == null)
{
size ++;
return new Node(key,value);
}
if (key.compareTo(node.key) < 0)
{
node.left = add(node.left,key,value);
}else if(key.compareTo(node.key) > 0)
{
node.right = add(node.right,key,value);
}else {
node.value = value;
}
return node;
} @Override
public V remove(K key) {
Node node = getNode(root,key);
if (node != null){
root = remove(root,key);
return node.value;
}
return null;
} private Node remove(Node node,K key)
{
if (node == null)
{
return null;
}
if (key.compareTo(node.key) < 0)
{
node.left = remove(node.left,key);
return node;
}else if(key.compareTo(node.key) > 0)
{
node.right = remove(node.right,key);
return node;
}else {
if (node.left == null)
{
Node rightNode = node.right;
node.right = null;
size--;
return rightNode;
} if (node.right == null)
{
Node leftNode = node.left;
node.left = null;
size--;
return leftNode;
} Node successor = minimum(node.right);
successor.right = removeMin(node.right);
node.left = node.right = null;
return successor;
}
} private Node getNode(Node node,K key)
{
if (node == null)
{
return null;
}
if (key.compareTo(node.key) == 0)
{
return node;
}else if (key.compareTo(node.key) < 0)
{
return getNode(node.left,key);
}else {
return getNode(node.right,key);
}
} @Override
public boolean contains(K key) {
return getNode(root,key) != null;
} @Override
public V get(K key) {
Node node = getNode(root,key);
return node == null ? null : node.value;
} @Override
public void set(K key, V newValue) {
Node node = getNode(root,key);
if (node == null)
{
throw new IllegalArgumentException( key + " is not exist");
}
node.value = newValue;
} @Override
public int getSize() {
return size;
} @Override
public boolean isEmpty() {
return size == 0;
} private Node minimum(Node node)
{
if (node.left == null)
{
return node;
}
return minimum(node.left);
} private Node removeMin(Node node)
{
if (node.left == null)
{
Node rightNode = node.right;
node.right = null;
size --;
return rightNode;
}
node.left = removeMin(node.left);
return node;
} }
二分搜索树实现Java的Map(下)的更多相关文章
- 【LeetCode题解】530_二分搜索树的最小绝对值差
目录 [LeetCode题解]530_二分搜索树的最小绝对值差 描述 方法一.中序遍历二分搜索树 思路 Java 代码 Python 代码 [LeetCode题解]530_二分搜索树的最小绝对值差 描 ...
- 7 二分搜索树的原理与Java源码实现
1 折半查找法 了解二叉查找树之前,先来看看折半查找法,也叫二分查找法 在一个有序的整数数组中(假如是从小到大排序的),如果查找某个元素,返回元素的索引. 如下: int[] arr = new in ...
- HDOJ(HDU) 2192 MagicBuilding(用Java的Map做了下)
Problem Description As the increase of population, the living space for people is becoming smaller a ...
- java——二分搜索树 BST(递归、非递归)
~ package Date_pacage; import java.util.Stack; import java.util.ArrayList; import java.util.LinkedLi ...
- List,Set,Map在java.util包下都是接口 List有两个实现类:ArrayList和LinkedList Set有两个实现类:HashSet和LinkedHashSet AbstractSet实现了Set
List,Set,Map在java.util包下都是接口 List有两个实现类:ArrayList和LinkedListSet有两个实现类:HashSet和LinkedHashSetAbstractS ...
- 浅析二分搜索树的数据结构的实现(Java 实现)
目录 树结构简介 二分搜索树的基础知识 二叉树的基本概念 二分搜索树的基本概念 二分搜索树的基本结构代码实现 二分搜索树的常见基本操作实现 添加操作 添加操作初步实现 添加操作改进 查询操作 遍历操作 ...
- Java的二分搜索树
定义 二分搜索树是二叉树(不包含重复元素). 二分搜索树的每个节点的值,大于左子树的所有节点的值,小于其右子树的所有节点的值. 每一棵子树也是二分搜索树. 二叉树搜索树必须要有比较,继承Compara ...
- JAVA二分搜索树
二叉树: 和链表一样,动态数据结构. 二叉树具有唯一根节点 二叉树具有天然的递归结构 二分搜索树是二叉树 二分搜索树的每个节点的值: 1.大于其左子树的所有节点的值 2.小于其右子树的所有节点的值 每 ...
- 【二分搜索树】1、二分查找法的实现 - Binary Search
简单记录 - bobo老师的玩转算法系列–玩转算法 - 二分搜索树 二叉搜索树 Binary Search Tree 查找问题 Searching Problem 查找问题是计算机中非常重要的基础问题 ...
随机推荐
- SpringBoot jar包中资源加载问题
在IDE下调试怎么也没有发现问题,但是部署到服务器上,提示找不到资源,找了半天资料总算是找到了原因: Jar包中的资源加载不能使用File方式,只能使用InputStream方式读取.知道原因就好解决 ...
- HTML学习笔记:1.基础概念
①HTML:Hypertext Markup Language,即超文本标记语言,文件由标记组成 ②HTML发展史 (几个重要节点): 1993(IETF):HTML 1.0 1995(W3C): ...
- Windows10 ubuntu子系统的启用即基础配置
Windows 10 在一周年更新后,本身集成一个不带有图形界面的ubuntu 14.04系统了,大大方便了Linux开发,并且本身使用很方便,像我这种Windows死忠,只会在Linux下跑一下一定 ...
- IDEA修改编辑背景图片
1.打开File -> Setting -> Plugs -> 搜索BackgroundImage. 然后安装.如图 2.按快捷键ctrl+shift+A,搜索set backgro ...
- Flask构建微电影(一)
第一章.项目介绍 1.1.前言 本教程我将带领大家如何使用flask框架开发微电影网站.Flask是python中最受欢迎的轻量级web框架,flask扩展丰富,冗余度小,可自由选择组合各种插 ...
- Python_小学口算题库生成器
import random import os import tkinter import tkinter.ttk from docx import Document columnsNumber = ...
- scrapy中 Mongo的存储
import pymongo MONGO_HOST = 'localhost' MONGO_PORT = 27017 MONGO_DB = 'today' MONGO_COLL = 'mm' clas ...
- sql中count(*)、count(col)、count(1)区别
count(*)和count(列)根本就是不等价的,count(*)是针对于全表的,而count(列)是针对于某一列的,如果此列值为空的话,count(列)是不会统计这一行的. 也就是说count(列 ...
- linux下安装nginx与配置
linux系统为Centos 64位 第一步:从http://nginx.org/download/上下载相应的版本(或者wget http://nginx.org/download/nginx-1. ...
- Python web(Django)连接Sql server
(开开心心每一天~ ---虫瘾师) Python Web(Django) 与SQL SERVRE的连接----Come QQ群:607021567(里面有很多开源代码和资料,并且python的游戏也有 ...