JAVA(数据结构和算法)一 树结构

JAVA(数据结构和算法)一 树结构

树的概念

  1. 在Java数据结构中 我们有 森林 树 二叉树 (完全二叉树,满二叉树) 平衡树 红黑树 哈弗曼树 还有mysql中的B 树 B+ 树等树的结构

1.1 树 :在Java程序中 树的实现分为两种一种 是 数组实现还有一种是链表实现现在树的实现一般是基于链表实现的。Java中树的结构如下

在这里插入图片描述
这就是一个常见的树结构 一个树有一个唯一的根节点root上图的A 为该树的根节点 那么 那么一个节点我称为Node 如果一个节点下面有多个节点我们称这些节点为 子节点(孩子节点,叶子节点) 反之这个拥有子节点的 节点我们称之为父节点 如果一个节点之间有多个 节点 我们称这些节点为兄弟节点

一个树有以下这个特点
1.1.1 度:什么是度 一个节点拥有的子节点个数我们称之为度 比如A的度为3 B的度为 2 C的度为0
1.1.2 深度:由根节点开始 由上而下 的一个深度 比如B的深度为2
1.1.3 高度: 与深度相反 从最下面的节点开始 由下到上 比如A的高度为3 这里注意一点 一个节点的高度和深度不一定相等 比如 A的深度为1 高度为3
1.1.4.度数:整个树所有有叶子节点的度的总和 比如上面的 度数为5 度数是总节点数-1

1.2 二叉树: 二叉树是树里面的一种特殊的 存在方式 从字面意思 也可以看出 二叉树 一个节点下面最多有两个子节点这样就形成了二叉树 二叉树 又分为
完全二叉树: 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。

满二叉树: 在这里插入图片描述
当一个二叉树 除最后一层没有子节点其他 都是两个子节点时 我们称这个二叉树为满二叉树
广度优先: 这是最简单的一种遍历方式 从根节点开始 横向遍历 例如上面 的二叉树 广度遍历为 ABCDEFG

深度优先: 这是最常用的一种遍历方式 由根节点开始往下深度遍历 深度遍历 又分为
前序遍历 :从根节点开始依次遍历左边和右边 由上图遍历结果为 ABDECFG 前序遍历特点遍历时根节点一定是第一个
中序遍历 :从最左边开始 以父节点为中心对称遍历 由上图遍历结果为 DBEAFCG 中序遍历的特点 遍历的时候根节点不可能出现在 头部 和尾部
后序遍历: 从深度最深开始遍历 先遍历根节点左边然后是右边最后是根
节点由上图遍历结果为 DEBFGCA 后序遍历的特点根节点一定是最后
一个被遍历的

1.3 红黑树 : 红黑树是平衡树的一种 红黑树 在java中最常见的地方是hashmap的在而hashmap是基于 链址算法实现的 也就是基于数组和链表 我们知道 链表的搜索很慢 所以这个时候使用红黑树的 二分查找大大加快的检索的效率

1.4 B 树 :学过mysql的应该了解过 用于 优化索引 加快搜索效率 具体原理本人能力有限就不在叙述

1.5 B+树 :B树的一个加强版用处跟B 树一样加快搜索效率但之间的有些结构不一样

$(function(){ $.fn.extend({ SimpleTree:function(options){ //初始化参数 var option = $.extend({ click:function(a){ } },options); option.tree=this; /* 在参数对象中添加对当前菜单树的引用,以便在对象中使用该菜单树 */ option._init=function(){ /* * 初始化菜单展开状态,以及分叉节点的样式 */ this.tree.find("ul ul").hide(); /* 隐藏所有子级菜单 */ this.tree.find("ul ul").prev("li").removeClass("open"); /* 移除所有子级菜单父节点的 open 样式 */ this.tree.find("ul ul[show='true']").show(); /* 显示 show 属性为 true 的子级菜单 */ this.tree.find("ul ul[show='true']").prev("li").addClass("open"); /* 添加 show 属性为 true 的子级菜单父节点的 open 样式 */ }/* option._init() End */ /* 设置所有超链接不响应单击事件 */ this.find("a").click(function(){ $(this).parent("li").click(); return false; }); /* 菜单项 接受单击 */ this.find("li").click(function(){ /* * 当单击菜单项 * 1.触发用户自定义的单击事件,将该 标签中的第一个超链接做为参数传递过去 * 2.修改当前菜单项所属的子菜单的显示状态(如果等于 true 将其设置为 false,否则将其设置为 true) * 3.重新初始化菜单 */ option.click($(this).find("a")[0]); /* 触发单击 */ /* * 如果当前节点下面包含子菜单,并且其 show 属性的值为 true,则修改其 show 属性为 false * 否则修改其 show 属性为 true */ /* if($(this).next("ul").attr("show")=="true"){ $(this).next("ul").attr("show","false"); }else{ $(this).next("ul").attr("show","true"); }*/ /* 初始化菜单 */ option._init(); }); /* 设置所有父节点样式 */ this.find("ul").prev("li").addClass("folder"); /* 设置节点“是否包含子节点”属性 */ this.find("li").find("a").attr("hasChild",false); this.find("ul").prev("li").find("a").attr("hasChild",true); /* 初始化菜单 */ option._init(); }/* SimpleTree Function End */ }); });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值