当前位置: 首页 > wzjs >正文

网站地图模板下载有趣的网站游戏

网站地图模板下载,有趣的网站游戏,阿里巴巴国际网站官网,如何在电脑建设网站文章目录 概要技术细节 概要 二叉搜索树中的关键子总是以满足二叉搜索树性质的方法来存储&#xff1a; 父节点的值&#xff1a;大于等于左子节点的值&#xff0c;小于等于右子节点的值。 设x是二叉搜索树中的一个节点。如果y是x的左子树的一个节点&#xff0c;那么y.key<x.…

文章目录

    • 概要
    • 技术细节

概要

二叉搜索树中的关键子总是以满足二叉搜索树性质的方法来存储:
父节点的值:大于等于左子节点的值,小于等于右子节点的值。
设x是二叉搜索树中的一个节点。如果y是x的左子树的一个节点,那么y.key<=x.key。
如果y是x右子树中的一个节点,那么y.key >= x.key。

技术细节

public class BinaryTreeSearch<K extends Comparable<K>, V> {static class BinaryNode<K, V> {/*** 键*/public K key;/*** 值*/public V val;/*** 左子节点*/public BinaryNode<K, V> left;/*** 右子树*/public BinaryNode<K, V> right;/*** 节点个数:子节点数量+1*/public int size;public BinaryNode(K key, V val) {this.key = key;this.val = val;left = null;right = null;size = 1;}}/*** 根节点*/private BinaryNode<K, V> root;/*** 添加元素或更新节点的值*/public void put(K key, V val) {root = put(root, key, val);}/*** 设置key和value* 如果key在树中不存在,则新增节点* 如果key存在,则更新节点的值。*/private BinaryNode<K, V> put(BinaryNode<K, V> node, K key, V val) {if (node == null) {return new BinaryNode<>(key, val);}//判断键值的大小int cmp = key.compareTo(node.key);//相等表示,是更新if (cmp < 0) {//键小于节点,则放在节点的左子树node.left = put(node.left, key, val);} else if (cmp > 0) {//键大于节点,则放在节点的右子树node.right = put(node.right, key, val);} else {//更新值node.val = val;}//节点数,子节点数量+1node.size = size(node.left) + size(node.right) + 1;return node;}public int size() {return size(root);}private int size(BinaryNode<K, V> node) {if (node == null) {return 0;}return node.size;}/*** 获取key的值,从跟节点向子节点开始查找*/public V get(K key) {BinaryNode<K, V> node = get(root, key);if (node != null) {return node.val;}return null;}private BinaryNode<K, V> get(BinaryNode<K, V> node, K key) {if (node == null) {return null;}int cp = key.compareTo(node.key);if (cp == 0) {return node;} else if (cp < 0) {//key值更小return get(node.left, key);} else {return get(node.right, key);}}/*** 获取最小值*/public V min() {BinaryNode<K, V> node = min(root);if (node == null) {return null;}return node.val;}/*** 获取该节点之后的最小值*/private BinaryNode<K, V> min(BinaryNode<K, V> node) {if (node == null) {return null;}if (node.left != null) {return min(node.left);}return node;}/*** 获取最大值*/public V max() {BinaryNode<K,V> node =  max(root);if(node == null){return null;}return node.val;}/*** 获取当前节点的最大值, 如果无右子节点,则当前节点是最大值。* 否则递归右子节点。*/private BinaryNode<K, V> max(BinaryNode<K, V> node) {if (node == null) {return null;}if (node.right != null) {return max(node.right);}return node;}/*** 删除最小值*/public void deleteMin() {root = deleteMin(root);}/*** 删除最小值* 如果当前节点为空,或是节点无子节点。则表示该节点最小。删除该节点。* 如果左子树为空,则表示当前节点是最小值,删除当前节点()。*/private BinaryNode<K, V> deleteMin(BinaryNode<K, V> node) {if (node == null || (node.left == null && node.right == null)) {return null;}//左子树为空在,说明node是最小值。并返回该节点的右节点。if (node.left == null) {return node.right;}//如果node不是最小值,则递归左子树找到最小值node.left = deleteMin(node.left);//重新计算节点数量node.size = size(node.left) + size(node.right) + 1;return node;}public void deleteMax() {root = deleteMax(root);}private BinaryNode<K, V> deleteMax(BinaryNode<K, V> node) {//如果节点为空则返回//如果节点没有子节点,则说明该节点是最大值,则删除该节点if (node == null || (node.left == null && node.right == null)) {return null;}//右子树为空在,说明node是最大值。//则删除该节点,返回该节点的左节点。if (node.right == null) {return node.left;}//如果右节点不为空,则递归有节点,以便删除最大值。node.right = deleteMax(node.right);//重新计算节点数量node.size = size(node.left) + size(node.right) + 1;return node;}public void delete(K key) {root = deleteNode(root, key);}private BinaryNode<K, V> deleteNode(BinaryNode<K, V> node, K key) {if (node == null) {return null;}int cmp = key.compareTo(node.key);if (cmp < 0) {node.left = deleteNode(node.left, key);} else if (cmp > 0) {node.right = deleteNode(node.right, key);} else {//查找到当前节点//如果左子节点为空,则直接返回node.right。即可if (node.left == null) {return node.right;}//如果右子节点为空,则直接返回node.left。即可if (node.right == null) {return node.left;}//左右子节点都存在//可以获取左子树的最大值,或右子树的最小值。//获取右子树的最小值BinaryNode<K, V> delete = min(node.right);//将右子树的最小值,替换到当前值node.key = delete.key;node.val = delete.val;//删除掉右子树的最小值node.right = deleteMin(node.right);}node.size = size(node.left) + size(node.right) + 1;return node;}public void orderPrint() {print(root);}private void print(BinaryNode<K, V> node) {if (node != null) {print(node.left);System.out.println("中序输出:" + node.val);print(node.right);}}
}
http://www.dtcms.com/wzjs/563992.html

相关文章:

  • 网站后台更新栏目网站数据库修改密码要怎么做
  • 常州网站开发培训云南网站优化公司
  • 浙江省建设会计协会网站可以做调查问卷的网站
  • 上传产品网站怎么做的做网站公司分为国内还是国外
  • 抽奖怎么做网站做海报免费素材网站有哪些
  • centos 7.3 wordpressseo短期培训班
  • 合肥高端网站建设设计公司哪家好我想注册公司怎么注册
  • 学做美食交流网站有哪些广州经济技术开发区
  • 免费网站域名注册申请做钓鱼网站用哪种编程语言
  • 网站式登录页面模板下载地址网站做动态和静态哪个贵
  • 大型物流公司网站html5网站开发实例书籍
  • 普洱网站建设优化上海短视频推广
  • 东莞机械网站建设wordpress淘宝客单页模板
  • 石家庄网站建设高端黑龙江省城乡和建设厅网站
  • 在线短视频网站开发费用做注册会员和购物的网站需要什么
  • 西宁市企业建站专业wordpress下载安装
  • 网站推广团队兰州网站制作成都
  • 4昌平区网站建设做网站客户端
  • 国外的建筑设计案例网站免费推广产品的平台
  • 搭建网站 软件下载网站流量统计分析
  • wordpress网站加载效果建站教程图解
  • 专业网站设计多少钱北京前端开发的薪资水平
  • 常州建设公司网站html怎么做动态页面
  • 网站建设公司果动流量推广平台
  • 手机网站模板psdIT做网站工资怎么样
  • 中国档案网站建设现状研究app应用程序
  • 上海城市分站seo室内装修设计企业
  • 代理厦门网站设计公司和县网站制作
  • 桐乡哪里有做网站的双语网站建设公司
  • 如何建立免费的网站wordpress注册邮箱收不到验证码