博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树的双亲表示法
阅读量:4940 次
发布时间:2019-06-11

本文共 3216 字,大约阅读时间需要 10 分钟。

树的双亲表示法是用一组连续空间(数组)存储树的节点,同时在每个节点中附设一个指示器指示其双亲节点在数组中的位置。

其结构如图:

 

 

 

 

 

 

 

 

 

package tree;import java.util.*;public class PTree
{ int max=100; int n,root; int a[]=new int[max]; //用于存放孩子结点在数组中的位置 PTNode nodes[]=new PTNode[max]; class PTNode
{ AnyType data; int parent; public PTNode(AnyType d,int p){ this.data=d; this.parent=p; } } public PTree(){ n=0; } public boolean isEmpty(){ //判断是否为空 return n==0; } public PTNode assign(AnyType d,int p){ //给结点赋值 PTNode newNode=new PTNode(d,p); return newNode; } public void insert(AnyType d,int p){ //添加新结点,给定结点位置 nodes[n]=assign(d,p); n++; } public void insert(PTree tree,int p){ //添加子树,给定结点位置 int m=n; //m为tree非根结点双亲位置的增加值 AnyType value=(AnyType)tree.getRoot(); insert(value,p); for(int i=1;i
n) System.out.println("数据不存在"); else if(getChildCount(p)==0){ //叶子 if(p==(n-1)){ //数组的最后一个 nodes[p].data=null; nodes[p].parent=-2; } int k; for(k=p+1;k
p) nodes[k].parent--; } n--; } else{ int dep=getDepth(p); int num[]=new int[n]; num[0]=p; int count=1,par=0; for(int i=0;i
j){ nodes[b-1].parent--; } } j--; n--; } } } } } public AnyType getRoot(){ //返回根结点元素,根结点不一定存在数组中第一个位置 for(int i=0;i
n){ return null; } return (AnyType)nodes[i].data; } public PTNode getParent(int p){ //返回父母结点,给定该结点位置 int pare=nodes[p].parent; return nodes[pare]; } public PTNode getParent(AnyType d){ //返回父母结点,给定该结点data int p=0; for(int i=0;i
n){ return null; } return (AnyType)getParent(p).data; } public int getChildCount(int p){ //返回孩子结点数 int count=0; for(int i=0;i
max) //记录当前最大深度 max=height; } return max; } public int getDepth(int m){ //获得某一结点所处的层次 if(m>n) return -2; int max=0,height,p=0; for(int i=0;i
max) //记录当前最大深度 max=height; } return max; } public static void main(String[] args) { PTree pt=new PTree(); PTree tr=new PTree(); pt.insert("aaa",-1); pt.insert("bbb",0); pt.insert("ccc",0); pt.insert("ddd",1); pt.insert("eee",2); pt.insert("fff",2); pt.insert("ggg",4); tr.insert("A",-1);tr.insert("B",0);tr.insert("C",0); pt.insert(tr,"ddd"); for(int i=0;i<10;i++){ System.out.println( pt.getData(i)); } System.out.println("******************"); System.out.println( pt.n); System.out.println("******************"); System.out.println( pt.getRoot()); System.out.println("******************"); System.out.println( pt.getParent("fff").data); System.out.println("******************"); System.out.println( pt.getDepth(9)); System.out.println("******************"); System.out.println(pt.getFirstChild(3).data); System.out.println("******************"); pt.delete(1); System.out.println( pt.n); System.out.println( pt.n); for(int i=0;i

 

转载于:https://www.cnblogs.com/oversea201405/p/3752269.html

你可能感兴趣的文章
CentOS 5.5 安装配置全攻略 (无线上网 更新源 显卡驱动 firefox3.6 flash插件 编译boost1.43.0 雅黑字体...
查看>>
ASP.NET MVC 3 Beta: Built-in support for charts(MVC3 Razor中使用图表的最佳方案)
查看>>
Java实现简单的计算器(原创)
查看>>
Java实现的日历(原创)
查看>>
sql server 2005学习笔记之触发器简介(一)
查看>>
Flex的Tree全部展开收缩,ji展开选中单个节点
查看>>
CMMI与Agile敏捷开发比较之一:两者的本质区别
查看>>
如何打造139团队(不同层次人员的选择与培养,大型研发团队,大型敏捷开发团队)...
查看>>
SSCE(SQL Server Compact Edition)适合哪些应用场景
查看>>
VS 2010 SP1 and SQL CE :ScottGu's Blog
查看>>
J2EE的13种核心技术简介
查看>>
JQuery怎么知道一个元素是否隐藏或显示How do you test if something is hidden in jQuery?
查看>>
Java发送Http请求,解析html返回
查看>>
将截断字符串或二进制数据。
查看>>
C#编码简单性之泛型篇(如何编写简短的C#代码,随时更新)
查看>>
Windows7 Home高级 64 中文版 + TortoiseSVN 64 英文版 + SVN Server 32 英文版安装过程
查看>>
IT人员及程序员怎样学好英语(关于如何利用极其有限的时间和条件学好英文)...
查看>>
在Visual Studio的Server Explorer中怎样修改表名
查看>>
[视频]怎样提升asp.net mvc 软件的性能 - 微软免费视频Improving ASP.NET MVC Application Performance...
查看>>
CMMI与Agile敏捷开发比较之二:需求管理篇(兼谈用敏捷实现和满足CMMI的ReqM过程域)...
查看>>