ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java- 数据结构之树

2022-04-04 10:31:49  阅读:167  来源: 互联网

标签:结点 Java 哈夫曼 路径 之树 二叉树 权值 数据结构 节点


树:

  • 模仿为我们现实生活中的案例生成的数据结构叫做树,Tree是由根节点和子节点组成的

二叉树的便利:前序遍历,中序遍历,后序遍历,这里的前中后指的是根节点出现的顺序;

哈夫曼树(最优二叉树)

1.相关名词:路径,路径长度,节点的权,节点的带权路径长度。

  • 路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径
  • 路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 。例如在一棵树中,规定根结点所在层数为1层,那么从根结点到第 i 层结点的路径长度为 i - 1
  • 结点的权:给每一个结点赋予一个新的数值,被称为这个结点的权。
  • 结点的带权路径长度:指的是从根结点到该结点之间的路径长度与该结点的权的乘积image

什么是哈夫曼树?

++当用 n 个结点(都做叶子结点且都有各自的权值)试图构建一棵树时,如果构建的这棵树的带权路径长度最小,称这棵树为“最优二叉树”,有时也叫“赫夫曼树”或者“哈夫曼树”++

如何构建哈夫曼数?

在构建哈弗曼树时,要使树的带权路径长度最小,只需要遵循一个原则,那就是:权重越大的结点离树根越近。在图 1 中,因为结点 a 的权值最大,所以理应直接作为根结点的孩子结点。

哈夫曼树的构建过程(重点):

对于给定的有各自权值的 n个结点,构建哈夫曼树有一个行之有效的办法:

  • 在 n 个权值中选出两个最小的权值,对应的两个结点组成一个新的二叉树,且新二叉树的根结点的权值为左右孩子权值的和;
  • 在原有的 n 个权值中删除那两个最小的权值,同时将新的权值加入到 n–2 个权值的行列中,以此类推;
  • 重复 1 和 2 ,直到所以的结点构建成了一棵二叉树为止,这棵树就是哈夫曼树。

二叉树:

特性:

  • 1、左子树上所有节点的值均小于它的根节点的值;
  • 2、右子树上所有节点的值均大于它的根节点的值;
  • 3、左、右子树也分别为二叉排序树。但是一个不好会形成链表结构,比如一个有序数组形成的二叉树

平衡二叉树

特点

  • 1、在二叉树的基础上,要求两个子树的高度差不能超过1;
  • 2、每次增删都会通过一次或多次旋转来平衡二叉树;

调整平衡的基本思想

红黑树

特性

  • 1、根节点是黑色;
  • 2、每个节点或者是黑色,或者是红色;
  • 3、每个叶子节点是黑色。 [注意:这里叶子节点,是指为空的叶子节点!;
  • 4、如果一个节点是红色的,则它的子节点必须是黑色的,也就是说一个红节点的父节点只能是黑色
  • 5、从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点,也就是说确保没有一条路径会比其他路径长出俩倍

标签:结点,Java,哈夫曼,路径,之树,二叉树,权值,数据结构,节点
来源: https://www.cnblogs.com/atao-BigData/p/16098483.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有