博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分搜索树实现Java的Map(下)
阅读量:5121 次
发布时间:2019-06-13

本文共 3566 字,大约阅读时间需要 11 分钟。

二分搜索树Map

public class BSTMap
,V> implements Map
{ 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; }}

 

转载于:https://www.cnblogs.com/dslx/p/10498580.html

你可能感兴趣的文章
Python2.7 urlparse
查看>>
sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug
查看>>
[WinAPI] API 2 [MessageBox API][消息框API]
查看>>
BZOJ 1264 动态规划 + 树状数组
查看>>
[BZOJ5248] 2018九省联考 D1T1 一双木棋 | 博弈论 状压DP
查看>>
super 小记
查看>>
C语言实现<读取>和<写入> *.ini文件(转)
查看>>
【架构】Linux的架构(architecture)
查看>>
从解决Cocos2dx-2.x arm64 Crash 来看C的奇技淫巧
查看>>
ASM 图解
查看>>
石子合并(一)
查看>>
Hibernate批量删除的两种方式
查看>>
Maven入门指南③:坐标和依赖
查看>>
MVC 校验
查看>>
Atheros AR9485 ubuntu 10.04 驱动安装及networking disable问题解决
查看>>
linux开发缩写
查看>>
java基础第十六篇之多线程
查看>>
3527: [Zjoi2014]力 - BZOJ
查看>>
17 , CSS 区块、浮动、定位、溢出、滚动条
查看>>
屏蔽元素默认样式中的边距
查看>>