- 浏览: 3435607 次
- 性别:
- 来自: China
文章分类
- 全部博客 (536)
- ajax (1)
- Algorithm (14)
- Android (40)
- CSS/HTML... (2)
- defy (3)
- DesignPattern (2)
- dorado (0)
- Drools (6)
- English/日本語 (7)
- Flex (2)
- Framework (0)
- Google (3)
- hibernate (13)
- homework (3)
- HTML5 (0)
- IDE (29)
- java (45)
- javaee (7)
- Javascript (14)
- java组件 (5)
- jQuery (4)
- jsp (8)
- jsf (2)
- Linux (2)
- lucene (0)
- mysql (6)
- news (3)
- Oracle (8)
- other (4)
- PHP (5)
- Python (0)
- Software Engineering (3)
- spring (7)
- struts1.x (14)
- struts2.x (14)
- strolling in cloud (1)
- subject:javaEnhance (20)
- Tomcat (7)
- validator (3)
- 学习·方法·心得 (8)
- .NET (2)
- vba (6)
- groovy (5)
- grails (2)
- SWT (0)
- big data (1)
- perl (1)
- objective-c (50)
- product (1)
- mac (7)
- ios (188)
- ios-phone (2)
- ios-system (15)
- ios-network (5)
- ios-file (4)
- ios-db (1)
- ios-media (3)
- ios-ui (27)
- ios-openSource (6)
- ios-animation (5)
- ios-drawing (7)
- c (2)
- ios-app (2)
- ios-course (15)
- ios-runtime (14)
- ios-code (8)
- ios-thread (8)
- ios-LBS (2)
- ios-issue (1)
- ios-design (2)
- Jailbreak (2)
- cocos2d (0)
- swift (16)
- ios-framework (4)
- apple watch (4)
- ios-web (1)
- react native (3)
- TVOS (1)
- OpenGL (1)
最新评论
-
xiaobinggg:
...
Session机制详解 -
菜鸟学生会:
Drools规则工作流引擎开发教程网盘地址:http://pa ...
Drools入门-----------环境搭建,分析Helloworld -
wangyudong:
不是很好用,不支持自动化测试RESTful API,也不支持自 ...
Simple REST Client POST使用方法 -
Paul0523:
很棒的一篇文章,感谢楼主分享
Session机制详解 -
啸笑天:
获取原型对象的三种方法<script>functi ...
复习JavaScript面向对象技术
import java.util.*; public class RedBlackTree<T extends Comparable> { //定义红黑树的颜色 private static final boolean RED = false; private static final boolean BLACK = true; static class Node { Object data; Node parent; Node left; Node right; //节点的默认颜色是黑色 boolean color = BLACK; public Node(Object data , Node parent , Node left , Node right) { this.data = data; this.parent = parent; this.left = left; this.right = right; } public String toString() { return "[data=" + data + ", color=" + color + "]"; } public boolean equals(Object obj) { if (this == obj) { return true; } if (obj.getClass() == Node.class) { Node target = (Node)obj; return data.equals(target.data) && color == target.color && left == target.left && right == target.right && parent == target.parent; } return false; } } private Node root; //两个构造器用于创建排序二叉树 public RedBlackTree() { root = null; } public RedBlackTree(T o) { root = new Node(o , null , null , null); } //添加节点 public void add(T ele) { //如果根节点为null if (root == null) { root = new Node(ele , null , null , null); } else { Node current = root; Node parent = null; int cmp = 0; //搜索合适的叶子节点,以该叶子节点为父节点添加新节点 do { parent = current; cmp = ele.compareTo(current.data); //如果新节点的值大于当前节点的值 if (cmp > 0) { //以右子节点作为当前节点 current = current.right; } //如果新节点的值小于当前节点的值 else { //以左子节点作为当前节点 current = current.left; } } while (current != null); //创建新节点 Node newNode = new Node(ele , parent , null , null); //如果新节点的值大于父节点的值 if (cmp > 0) { //新节点作为父节点的右子节点 parent.right = newNode; } //如果新节点的值小于父节点的值 else { //新节点作为父节点的左子节点 parent.left = newNode; } //维护红黑树 fixAfterInsertion(newNode); } } //删除节点 public void remove(T ele) { //获取要删除的节点 Node target = getNode(ele); //如果被删除节点的左子树、右子树都不为空 if (target.left != null && target.right != null) { //找到target节点中序遍历的前一个节点 //s用于保存target节点的左子树中值最大的节点 Node s = target.left; //搜索target节点的左子树中值最大的节点 while (s.right != null) { s = s.right; } //用s节点来代替p节点 target.data = s.data; target = s; } //开始修复它的替换节点,如果该替换节点不为null Node replacement = (target.left != null ? target.left : target.right); if (replacement != null) { // 让replacement的parent指向target的parent replacement.parent = target.parent; //如果target的parent为null,表明target本身是根节点 if (target.parent == null) { root = replacement; } //如果target是其父节点的左子节点 else if (target == target.parent.left) { //让target的父节点left指向replacement target.parent.left = replacement; } //如果target是其父节点的右子节点 else { //让target的父节点right指向replacement target.parent.right = replacement; } //彻底删除target节点 target.left = target.right = target.parent = null; // 修复红黑树 if (target.color == BLACK) { fixAfterDeletion(replacement); } } //target本身是根节点 else if (target.parent == null) { root = null; } else { //target没有子节点,把它当成虚的替换节点。 //修复红黑树 if (target.color == BLACK) { fixAfterDeletion(target); } if (target.parent != null) { //如果target是其父节点的左子节点 if (target == target.parent.left) { //将target的父节点left设为null target.parent.left = null; } //如果target是其父节点的右子节点 else if (target == target.parent.right) { //将target的父节点right设为null target.parent.right = null; } //将target的parent设置null target.parent = null; } } } //根据给定的值搜索节点 public Node getNode(T ele) { //从根节点开始搜索 Node p = root; while (p != null) { int cmp = ele.compareTo(p.data); //如果搜索的值小于当前p节点的值 if (cmp < 0) { //向左子树搜索 p = p.left; } //如果搜索的值大于当前p节点的值 else if (cmp > 0) { //向右子树搜索 p = p.right; } else { return p; } } return null; } //广度优先遍历 public List<Node> breadthFirst() { Queue<Node> queue = new ArrayDeque<Node>(); List<Node> list = new ArrayList<Node>(); if( root != null) { //将根元素入“队列” queue.offer(root); } while(!queue.isEmpty()) { //将该队列的“队尾”的元素添加到List中 list.add(queue.peek()); Node p = queue.poll(); //如果左子节点不为null,将它入“队列” if(p.left != null) { queue.offer(p.left); } //如果右子节点不为null,将它入“队列” if(p.right != null) { queue.offer(p.right); } } return list; } //插入节点后修复红黑树 private void fixAfterInsertion(Node x) { x.color = RED; //直到x节点的父节点不是根,且x的父节点不是红色 while (x != null && x != root && x.parent.color == RED) { //如果x的父节点是其父节点的左子节点 if (parentOf(x) == leftOf(parentOf(parentOf(x)))) { //获取x的父节点的兄弟节点 Node y = rightOf(parentOf(parentOf(x))); //如果x的父节点的兄弟节点是红色 if (colorOf(y) == RED) { //将x的父节点设为黑色 setColor(parentOf(x), BLACK); //将x的父节点的兄弟节点设为黑色 setColor(y, BLACK); //将x的父节点的父节点设为红色 setColor(parentOf(parentOf(x)), RED); x = parentOf(parentOf(x)); } //如果x的父节点的兄弟节点是黑色 else { //如果x是其父节点的右子节点 if (x == rightOf(parentOf(x))) { //将x的父节点设为x x = parentOf(x); rotateLeft(x); } //把x的父节点设为黑色 setColor(parentOf(x), BLACK); //把x的父节点的父节点设为红色 setColor(parentOf(parentOf(x)), RED); rotateRight(parentOf(parentOf(x))); } } //如果x的父节点是其父节点的右子节点 else { //获取x的父节点的兄弟节点 Node y = leftOf(parentOf(parentOf(x))); //如果x的父节点的兄弟节点是红色 if (colorOf(y) == RED) { //将x的父节点设为黑色。 setColor(parentOf(x), BLACK); //将x的父节点的兄弟节点设为黑色 setColor(y, BLACK); //将x的父节点的父节点设为红色 setColor(parentOf(parentOf(x)), RED); //将x设为x的父节点的节点 x = parentOf(parentOf(x)); } //如果x的父节点的兄弟节点是黑色 else { //如果x是其父节点的左子节点 if (x == leftOf(parentOf(x))) { //将x的父节点设为x x = parentOf(x); rotateRight(x); } //把x的父节点设为黑色 setColor(parentOf(x), BLACK); //把x的父节点的父节点设为红色 setColor(parentOf(parentOf(x)), RED); rotateLeft(parentOf(parentOf(x))); } } } //将根节点设为黑色 root.color = BLACK; } //删除节点后修复红黑树 private void fixAfterDeletion(Node x) { //直到x不是根节点,且x的颜色是黑色 while (x != root && colorOf(x) == BLACK) { //如果x是其父节点的左子节点 if (x == leftOf(parentOf(x))) { //获取x节点的兄弟节点 Node sib = rightOf(parentOf(x)); //如果sib节点是红色 if (colorOf(sib) == RED) { //将sib节点设为黑色 setColor(sib, BLACK); //将x的父节点设为红色 setColor(parentOf(x), RED); rotateLeft(parentOf(x)); //再次将sib设为x的父节点的右子节点 sib = rightOf(parentOf(x)); } //如果sib的两个子节点都是黑色 if (colorOf(leftOf(sib)) == BLACK && colorOf(rightOf(sib)) == BLACK) { //将sib设为红色 setColor(sib, RED); //让x等于x的父节点 x = parentOf(x); } else { //如果sib的只有右子节点是黑色 if (colorOf(rightOf(sib)) == BLACK) { //将sib的左子节点也设为黑色 setColor(leftOf(sib), BLACK); //将sib设为红色 setColor(sib, RED); rotateRight(sib); sib = rightOf(parentOf(x)); } //设置sib的颜色与x的父节点的颜色相同 setColor(sib, colorOf(parentOf(x))); //将x的父节点设为黑色 setColor(parentOf(x), BLACK); //将sib的右子节点设为黑色 setColor(rightOf(sib), BLACK); rotateLeft(parentOf(x)); x = root; } } //如果x是其父节点的右子节点 else { //获取x节点的兄弟节点 Node sib = leftOf(parentOf(x)); //如果sib的颜色是红色 if (colorOf(sib) == RED) { //将sib的颜色设为黑色 setColor(sib, BLACK); //将sib的父节点设为红色 setColor(parentOf(x), RED); rotateRight(parentOf(x)); sib = leftOf(parentOf(x)); } //如果sib的两个子节点都是黑色 if (colorOf(rightOf(sib)) == BLACK && colorOf(leftOf(sib)) == BLACK) { //将sib设为红色 setColor(sib, RED); //让x等于x的父节点 x = parentOf(x); } else { //如果sib只有左子节点是黑色 if (colorOf(leftOf(sib)) == BLACK) { //将sib的右子节点也设为黑色 setColor(rightOf(sib), BLACK); //将sib设为红色 setColor(sib, RED); rotateLeft(sib); sib = leftOf(parentOf(x)); } //将sib的颜色设为与x的父节点颜色相同 setColor(sib, colorOf(parentOf(x))); //将x的父节点设为黑色 setColor(parentOf(x), BLACK); //将sib的左子节点设为黑色 setColor(leftOf(sib), BLACK); rotateRight(parentOf(x)); x = root; } } } setColor(x, BLACK); } //获取指定节点的颜色 private boolean colorOf(Node p) { return (p == null ? BLACK : p.color); } //获取指定节点的父节点 private Node parentOf(Node p) { return (p == null ? null: p.parent); } //为指定节点设置颜色 private void setColor(Node p, boolean c) { if (p != null) { p.color = c; } } //获取指定节点的左子节点 private Node leftOf(Node p) { return (p == null) ? null: p.left; } //获取指定节点的右子节点 private Node rightOf(Node p) { return (p == null) ? null: p.right; } /** * 执行如下转换 * p r * r p * q q */ private void rotateLeft(Node p) { if (p != null) { //取得p的右子节点 Node r = p.right; Node q = r.left; //将r的左子节点链到p的右节点链上 p.right = q; //让r的左子节点的parent指向p节点 if (q != null) { q.parent = p; } r.parent = p.parent; //如果p已经是根节点 if (p.parent == null) { root = r; } //如果p是其父节点的左子节点 else if (p.parent.left == p) { //将r设为p的父节点的左子节点 p.parent.left = r; } else { //将r设为p的父节点的右子节点 p.parent.right = r; } r.left = p; p.parent = r; } } /** * 执行如下转换 * p l * l p * q q */ private void rotateRight(Node p) { if (p != null) { //取得p的左子节点 Node l = p.left; Node q = l.right; //将l的右子节点链到p的左节点链上 p.left = q; //让l的右子节点的parent指向p节点 if (q != null) { q.parent = p; } l.parent = p.parent; //如果p已经是根节点 if (p.parent == null) { root = l; } //如果p是其父节点的右子节点 else if (p.parent.right == p) { //将l设为p的父节点的右子节点 p.parent.right = l; } else { //将l设为p的父节点的左子节点 p.parent.left = l; } l.right = p; p.parent = l; } } //实现中序遍历 public List<Node> inIterator() { return inIterator(root); } private List<Node> inIterator(Node node) { List<Node> list = new ArrayList<Node>(); //递归处理左子树 if (node.left != null) { list.addAll(inIterator(node.left)); } //处理根节点 list.add(node); //递归处理右子树 if (node.right != null) { list.addAll(inIterator(node.right)); } return list; } public static void main(String[] args) { RedBlackTree<Integer> tree = new RedBlackTree<Integer>(); //添加节点 tree.add(5); tree.add(20); tree.add(10); tree.add(3); tree.add(8); tree.add(15); tree.add(30); System.out.println(tree.breadthFirst()); //删除节点 tree.remove(20); System.out.println(tree.breadthFirst()); // System.out.println(tree.inIterator()); } }
发表评论
-
qweqwe
2012-07-11 16:06 1江蛤蟆 一统江湖 -
123123123
2012-07-11 16:04 0<p>法轮</p> -
母牛繁殖问题
2011-12-30 13:08 3833question:农场的母牛寿命是5年,母牛第二年和第四年会繁 ... -
树形显示
2011-07-17 11:26 1638/** 树形结构应用十分广泛。 下面这段代码根据 ... -
求能除尽1至n的最小整数
2011-07-16 02:43 3957为什么1小时有60分钟,而不是100分钟呢?这是历史上的 ... -
java 四则运算 栈的实现
2011-07-15 13:42 13842import java.util.Stack; /* ... -
用1、2、3、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列 要求:"4"不能在第三位,"3"与"5"不能相连。
2011-07-15 12:45 3370用1、2、3、3、4、5这六 ... -
【code】java实现排序二叉树
2011-06-27 21:45 2855import java.util.*; publi ... -
【code】java创建哈夫曼树和实现哈夫曼编码
2011-06-27 17:31 12877创建哈夫曼树 主要思想: (1)对List集合中所有节点进 ... -
【code】java实现十种常见内部排序
2011-06-20 19:22 3074常见的内部排序: 下面介绍这十种常见内部排序(都是从 ... -
【code】java二叉树深(先中后)、广遍历
2011-06-19 16:55 1951import java.util.*; publi ... -
【code】java二叉树的实现
2011-06-17 22:50 5848二叉树的顺序存储 public class Array ... -
【code】java树的实现
2011-06-17 22:20 11948树的父节点存储实现 import java.util. ... -
【code】java栈和队列实现
2011-06-16 22:11 4943顺序栈的实现 import java.util.Arrays ... -
【code】java线性表实现
2011-06-16 21:24 3657顺序线性表的实现 import java.util.A ...
相关推荐
Java code Java code Java code Java code Java code Java code Java code
ROS基于C++动力学约束的路径规划源码+ppt文件.zip
ASP.NET B/S结构城市酒店入住信息管理系统的设计与实现简介 一、项目背景与意义 随着城市旅游的蓬勃发展,酒店业作为旅游产业链中的重要一环,面临着日益激烈的市场竞争。为了提升酒店的服务质量和管理效率,信息化管理成为酒店业不可或缺的一部分。因此,我们设计并实现了一个基于ASP.NET的B/S(浏览器/服务器)结构城市酒店入住信息管理系统。该系统旨在帮助酒店实现入住信息的快速录入、查询、修改和统计,提升酒店的运营效率和客户体验。 二、系统主要功能 用户管理:系统支持管理员、前台服务员、客户等不同角色的注册、登录和权限管理。通过角色权限的设置,确保系统数据的安全性和完整性。 房间管理:管理员可以添加、编辑、删除房间信息,包括房间类型、价格、状态等。前台服务员可以实时查看房间状态,为客人办理入住和退房手续。 入住信息管理:前台服务员可以录入客人的入住信息,包括姓名、证件号码、联系方式、入住时间和离店时间等。系统支持客人信息的快速查询和修改,方便前台服务员处理各种客户需求。 费用管理:系统根据客人的入住时间和房间价格自动计算费用,并支持多种支付方式。管理员可以设置折扣、优惠券等促销
基于streamlit的YOLOv8可视化交互界面
liba52-0-0.7.5+svn613-lp152.3.2.aarch64
基于matlab实现配电网三相潮流计算方法,对几种常用的配电网潮流计算方法进行了对比分析.rar
121342141414
哈希算法的特点
复刻平衡小车,自行添加了转向环和蓝牙控制,蓝牙APP使用的是轮趣科技的。该项目为复刻平衡小车,其中大量代码为b站up主_WNNN的开源代码,加了转向环的代码,添加蓝牙控制功能. 该小车主体由洞洞板焊接,使用的io口焊的时候忘记记了,随缘吧。
zend解密 dezender12 dezender12是一个专业对用Zend Encoder/SafeGuard, ionCube, SourceGuardian,phpcipher、codelock或SourceCop加密过的PHP文件进行破解的网站, 它主要运用密码分析、解压缩和反编译技术将经编码/加密过的PHP文件还原为可阅读、可执行的PHP源文件。
客户端环境配置 第一步 配置python环境 下载python(版本:python>=3.8)(建议使用访问Anaconda官网配置虚拟环境,具体步骤如下) 1)访问Anaconda官网:https://www.anaconda.com/products/individual 2)选择相应的操作系统版本并下载对应的安装包(推荐下载64位版本) 3)打开下载的安装包,按照提示进行安装即可 4)创建一个虚拟环境: conda create --name 自命名 python=3.9.16 第二步 下载库 注意:下载库前,如果想要更好的帧数体验请安装cuda版本哦(因为一般默认会安装cpu的版本) pip换源: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 切换到项目文件夹下,下载依赖: pip install -r requirements.txt 我自己使用的环境:python3.9+CPU 第三步 运行项目(如果不需要(开启网页端) 或 (对接RTSP))
运用Qt框架+FFmpeg音视频解码库实现音频播放器,通过实时解码音频传给设备进行播放,可供学习和参考
liba2ps1-4.15.5-2.2.s390x
一个基于linux C++的Flv解析器.zip
机械设计电机冲切转子组装一体机sw18可编辑非常好的设计图纸100%好用.zip
本Bash脚本用于自动化管理Java JAR应用的启动、停止及监控。首先检查JAR进程是否在运行,如在运行则安全终止。随后,使用预设的Java参数启动JAR文件,并将输出和错误日志重定向至日志文件。启动后,脚本持续监控JAR进程状态,确保其在预设时间内成功启动。本脚本提供了灵活的配置和错误处理机制,为Java应用的运维管理带来了便捷与可靠性。
2024-2030全球及中国太阳能汽油泵行业研究及十五五规划分析报告
Geek
yolov3无人机俯视视角下热红外行人小目标检测权重, 包含5000多千张YOLO算法无人机俯视视角下热红外行人小目标数据集,数据集目录已经配置好,yolo格式的标签,划分好 train,val, test,并附有data.yaml文件,yolov5、yolov7、yolov8等算法可以直接进行训练模型, 数据集和检测结果参考:https://blog.csdn.net/zhiqingAI/article/details/124230743 数据集配置目录结构data.yaml: nc: 1 names: ['person']
基于C#的开源音乐播放器MetroPlayer.zip