AVL树计算平衡因子的计算与AVL树的旋转类型Java代码
2023-06-13 09:11:56 时间
1、本篇博文的目标
AVL树为了保证平衡因子的绝对值不大于1,需要对节点进行旋转。如下面的这篇博文所示。
AVL树的旋转_Colourful.的博客-CSDN博客_avl树旋转
如果想要对树进行旋转,就需要具备两个先要的条件
(1)平衡因子的判断
(2)旋转的类型
2、如何计算平衡因子和不平衡的情况下的旋转类型
【平衡因子】
平衡因子是左右子树深度差,所以平衡因子的计算就是左右子树的深度差值计算。所以只需要通过递归的方式计算左子树和右子树的差值即可。所以问题就转换成了计算树的深度。
【树的旋转类型】
通过上面的引用的博文可知,树的旋转需要知道是是下面的那种类型?
(1)left- left
(2) right - right
(3) left -right
(4) right -left
计算是那种类型只需要在树的深度计算的时候,对树进行递归的时候记录树的递归路径即可
3、代码
//递归方式求树的深度,TreeTrace类里面有两个变量,一个是depth,该值就是树的深度。另外一个是trace,
//是arrayLIst的集合,该集合就记录了树的旋转类型
//计算平衡因子只需要把getDepth(左子树的节点)的depth和getDepth右子树的depth相减即可。
public static Treetrace getDepth(SearchTreeNode currentNode) {
if (currentNode == null){
return new Treetrace();
}
Treetrace rightTrace = getDepth(currentNode.right);
Treetrace leftTrace = getDepth(currentNode.left);
if (rightTrace.depth>leftTrace.depth){
rightTrace.depth++;
if (currentNode.right != null || currentNode.left!=null){
rightTrace.trace.add("right");
}
return rightTrace;
}
else {
if (currentNode.right != null || currentNode.left!=null){
leftTrace.trace.add("left");
}
leftTrace.depth++;
return leftTrace;
}
}
}
class SearchTreeNode{
SearchTreeNode parent ;
SearchTreeNode left ;
SearchTreeNode right ;
int value;
SearchTreeNode(int value){
this.value = value;
parent = null;
right = null;
left = null;
}
}
class Treetrace{
int depth=0;
ArrayList<String> trace = new ArrayList<>();
}
相关文章
- 怎么用命令提示符运行JAVA代码_java命令提示符如何进入
- java 把对象转成map_Java对象转换成Map[通俗易懂]
- Java 文件上传与下载
- java queue toarray_Java PriorityBlockingQueue toArray()用法及代码示例
- java高级工程师面试情景题_Java高级工程师面试题III
- java 调用.asmx_Java调用asmx的一个例子
- java中static关键字的作用_Java:Java中static关键字作用
- vscode配置java环境变量_配置Java
- Java计算文件MD5值代码详解编程语言
- Java程序员必备知识,《JAVA编程思想》包和访问权限详解编程语言
- 怎么解决java.lang.NoClassDefFoundError错误详解编程语言
- 在java代码中执行js脚本,实现计算出字符串“(1+2)*(1+3)”的结果详解编程语言
- 实现使用Java代码实现MySQL数据库连接(java连接mysql数据库代码)
- 实现使用Java实现Redis消息队列(redis消息队列java)
- 清理Redis中 Java实现的过期key清理(redisjava过期)
- 如何在Linux系统下有效地启动Java程序,让你的代码在Linux中也能正常运行?(linux下启动java)
- 应用Linux监控下Java应用性能分析(linux监控java)
- Java程序员的MySQL数据库之旅(java操作mysql数据库)