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

道路运输电子证照seo全称英文怎么说

道路运输电子证照,seo全称英文怎么说,今天北京发生的重大新闻,天津做网站的公司文章目录 概述实现创建节点查找节点增加节点查找后驱值根据关键词删除找到树中所有小于key的节点的value 概述 二叉搜索树,它具有以下的特性,树节点具有一个key属性,不同节点之间key是不能重复的,对于任意一个节点,它…

文章目录

  • 概述
  • 实现
    • 创建节点
    • 查找节点
    • 增加节点
    • 查找后驱值
    • 根据关键词删除
    • 找到树中所有小于key的节点的value

概述

二叉搜索树,它具有以下的特性,树节点具有一个key属性,不同节点之间key是不能重复的,对于任意一个节点,它的key都要比左子树的key大,比右子树的key小

实现

创建节点

static class BSTNode {int key;Object value;BSTNode left;BSTNode right;public BSTNode(int key, Object value) {this.key = key;this.value = value;}public BSTNode(int key, Object value, BSTNode left, BSTNode right) {this.key = key;this.value = value;this.left = left;this.right = right;}}

查找节点

利用二叉树的性质

public Object get(int key) {BSTNode node = root;while (node != null) {if (node.key < key) {node = node.right;} else if (node.key > key) {node = node.left;} else {return node.value;}}return null;}

增加节点

同样利用二叉树的性质,但是需要记录要增加的节点的父节点

public void put(int key, Object value) {BSTNode node = root;BSTNode parent = null;while (node != null) {parent = node;if (key < node.key) {node = node.left;} else if (key > node.key) {node = node.right;} else {//直接修改node.value = value;return;}}if (parent == null) {root = new BSTNode(key, value);} else if (key > parent.key) {parent.right = new BSTNode(key, value);} else {parent.left = new BSTNode(key, value);}}

查找后驱值

在后面的AVL,以及红黑树中删除节点是,我们经常会需要求一个节点的后驱节点

分类讨论,分成两种情况
若节点有右子树,那么右子树的最小值就是前驱
若没有右子树,则去寻找是否存在从右而来的祖先节点,最近的这个祖先节点就是后驱
两种情况都不满足,则该节点没有后驱

public Object predecessor(int key) {BSTNode ancestorFromRight = null;BSTNode node = root;while (node != null) {if (key < node.key) {ancestorFromRight = node;node = node.left;} else if (key > node.key) {node = node.right;} else {break;}}//没有该节点if (node == null) {return null;}if (node.right != null) {return min(node.right);}return ancestorFromRight == null ? null : ancestorFromRight.value;}public Object min(BSTNode node) {if (node == null) {return null;}while (node.left != null) {node = node.left;}return node.value;}

根据关键词删除

根据关键字删除
删除有一下几种情况
第一种:删除节点没有右孩子,将左孩子挂过去
第二种:删除节点没有左孩子,将右孩子挂过去
第三种:都没有,挂过去null
第四种:左右孩子都有,可以将后继节点挂在parent后面,后继节点为s,后继节点的父亲为sp
  1.将如果sp就是要删除的节点
  2.sp不是删除节点,需要将s的后代给sp

public Object delete(int key) {BSTNode node = root;BSTNode parent = null;while (node != null) {if (key < node.key) {parent = node;node = node.left;} else if (key > node.key) {parent = node;node = node.right;} else {break;}}if (node == null) {return null;}if (node.left == null) {//情况1shift(parent, node, node.right);//情况2} else if (node.right == null) {shift(parent, node, node.left);} else {BSTNode s = node.right;BSTNode sParent = node;while (s.left != null) {sParent = s;s = s.left;}if (sParent != node) {//将后驱节点的孩子挂在后驱节点父亲的后面shift(sParent, s, s.right);s.right = node.right;}//后驱节点一定没有左孩子,所以可以直接的挂靠shift(parent, node, s);s.left = node.left;}return node.value;}/** 托孤方法** */private void shift(BSTNode parent, BSTNode deleted, BSTNode child) {if (parent == null) {root = child;} else if (deleted == parent.left) {parent.left = child;} else {parent.right = child;}}

找到树中所有小于key的节点的value

我们可以通过一个中序遍历实现,对于一个二叉搜索树来说,中序遍历的结果,恰好是从小到大排序的

public List<Object> less(int key) {ArrayList<Object> result = new ArrayList<>();LinkedList<BSTNode> stack = new LinkedList<>();BSTNode node = root;while (node != null || !stack.isEmpty()) {if (node != null) {stack.push(node);node = node.left;} else {BSTNode min = stack.pop();if (min.key < key) {result.add(min.value);} else {break;}node = min.right;}}return result;}
http://www.yidumall.com/news/95811.html

相关文章:

  • 个人做网站有什么坏处搜索网站有哪些
  • 建设银行官网首页网站南山片区怎么创建私人网站
  • 武汉网站建设优化昆山优化外包
  • 提供网站建设出售茂名seo快速排名外包
  • 网站建设论文源代码好的搜索引擎推荐
  • 乐陵人力资源网站高端网站设计公司
  • 学做网站丛什么开始网络推广和网站推广平台
  • 网站如何做反链直通车怎么开
  • 网站建设的三大原则小说搜索风云榜排名
  • 西安网站建设公司云网国外直播平台tiktok
  • 优秀b2c网站设计欣赏站外推广渠道
  • 我国政府网站建设情况深圳网络推广培训
  • 企业网站备案网络推广怎么做好
  • 北京网站设计公司兴田德润简介广州网站优化公司排名
  • 企业网站建设定制百度百度一下一下
  • 企业网站建设教程上海seo优化公司 kinglink
  • 网站前端如何做兼职制作网页的软件
  • 网站建设套餐网络推广网上营销
  • 政府网站域名后缀淄博网络推广公司哪家好
  • 农村网站建设推广代运营公司
  • win 2003 网站 管理员汕头seo优化项目
  • wordpress 头部 固定上海网站seo策划
  • 如何做网站轮播图和菜单全屏在百度上怎么发布广告
  • 台州网站制作方案网络技术推广服务
  • 深圳网站建设认准乐云网址收录平台
  • 做外贸需要什么样的网站现在感染症状有哪些
  • 净水器东莞网站建设免费文件外链网站
  • 做兼职上什么网站北京企业网络推广外包
  • 手机排行网站有哪些重庆seowhy整站优化
  • 纪委建设网站的意义网站设计制作一条龙