Java数据结构-树及树的存储结构

本文介绍了树的基本概念,包括结点、度、叶子结点和分支结点等。讨论了树的术语,如路径、路径长度、祖先、子孙等。接着,文章比较了线性结构与树结构,并详细探讨了树的存储结构,如双亲表示法、多重链表表示法、孩子表示法以及它们的改进版,如孩子双亲表示法和孩子兄弟表示法。最后,预告将深入讲解二叉树。
摘要由CSDN通过智能技术生成

树的定义:n(n>=0)个节点的有限集。

  1. n=0时称为空树。
  2. n!=0时为非空树,有且仅有一个特定的节点——根;n>1时,其它节点可以分为m(m>0)个互不相交的有限集T1~Tm,其中每一个集合本身又是一棵树,并且称为根的子树。

树的一些基本术语:

  1. 树的结点:由一个数据元素和若干个指向其子树的分支组成。
  2. 结点的度:结点所拥有的子树的个数(即分支数)称为该结点的度。
  3. 叶子结点:度为0的结点称为叶子结点,或者称为终端结点。
  4. 分支结点:度不为0的结点称为分支结点,或者称为非终端结点。一棵树的结点由叶子结点和分支结点组成。
  5. 孩子、双亲、兄弟:树中一个结点的子树的根结点称为这个结点的孩子;这个结点称为它孩子结点的双亲;具有同一个双亲的孩子结点互称为兄弟。
  6. 路径、路径长度:如果一棵树的一串结点n1,n2,…,nk有如下关系:结点ni是ni+1的父结点(i为1~k,不等于k的值),就把n1,n2,…,nk称为一条由n1至nk的路径。路径长度是指路径上经过的边的数量,所以这条路径的长度是k-1。
  7. 祖先、子孙:在树中,如果有一条路径从结点M到结点N,那么M就称为N的祖先,而N称为M的子孙。
  8. 结点的层数:规定树的根结点的层数为1,其余结点的层数等于它双亲结点的层数加1。
  9. 树的深度(高度):树中所有结点中的最大层数称为树的深度。
  10. 树的度&#
$(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、付费专栏及课程。

余额充值