Map和Set
在了解这两个之前需要知道二叉搜索树
二叉搜索树是节点的左边所有值小于它,右边大于它,并且所有节点满足这一点
点击查看代码
public class BinarySearchTree {
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int val){
this.val = val;
}
}
public TreeNode root;
//添加元素
public boolean insert(int val){
if(root == null){
root = new TreeNode(val);
return true;
}
TreeNode node = new TreeNode(val);
TreeNode cur = root;
TreeNode parent = root;
while (cur != null){
if(cur.val > val){
parent = cur;
cur = cur.left;
}else if(cur.val < val){
parent = cur;
cur = cur.right;
}else{
return false;
}
}
if(parent.val > val){
parent.left = node;
}else {
parent.right = node;
}
return true;
}
public boolean search(int val){
TreeNode node = root;
while (node != null){
if(node.val < val){
node = node.right;
}else if(node.val > val){
node = node.left;
}else{
return true;
}
}
return false;
}
//删除
public void remove(int val){
TreeNode parent = root;
TreeNode node = root;
while (node != null){
if(node.val < val){
parent = node;
node = node.right;
}else if(node.val > val){
parent = node;
node = node.left;
}else{
removeNode(node,parent);
return;
}
}
}
private void removeNode(TreeNode node,TreeNode parent){
if(node.left == null){
if(node == root ){
root = node.right;
}else if(node == parent.left){
parent.left = node.right;
}else {
parent.right = node.right;
}
}else if(node.right == null){
if(node == root){
root = node.left;
}else if(node == parent.left){
parent.left = node.left;
}else {
parent.right = node.left;
}
}else {
TreeNode curP = node;
TreeNode cur = node.right;
while (cur.left != null){
curP = cur;
cur = cur.left;
}
node.val = cur.val;
if(curP.left == cur){
curP.left = cur.right;
}else {
curP.right = cur.right;
}
}
}
}
浙公网安备 33010602011771号