数据结构
文章平均质量分 65
EdmondYoung
这个作者很懒,什么都没留下…
展开
-
java中图的两种存储方式
大家知道,图这种数据结构在java中有邻接表与邻接矩阵这两种存储方式,前者编程相对复杂但是效率较高,后者编程相对简单但是效率较低,我们利用java可以很容易的实现这两种数据结构。代码如下邻接矩阵的存储方式:public class MGraph { private int[][] edges;//邻接矩阵 private int numOfEdges;//边的数目 pr原创 2015-08-09 10:38:49 · 5237 阅读 · 0 评论 -
哈夫曼树与哈夫曼编码
哈夫曼编码使用在编码领域,可以有效的压缩存储空间,我们的程序分为两部分,第一部分是哈夫曼树的节点类,定义了它的码值,权重(即出现频率),左右孩子节点与双亲节点,初始化时后三者都是空的。代码如下public class HTNode { private char data; private int weight; private HTNode parent; private HTNo原创 2015-08-03 17:48:36 · 504 阅读 · 0 评论 -
java中二叉排序树模型的建立
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的节点。插入和创建过程比较简单,我就不说了,这里讨论下删除操作:在二叉排序树删去一个结点,分三种情况讨论:原创 2015-08-04 14:26:35 · 1180 阅读 · 0 评论 -
线索二叉树模型的建立与遍历
线索二叉树是在普通二叉树模型上建立线索后的树模型,再建立了线索后我们可以在O(n)的时间内遍历该树,并且很方便的找出某个节点的前驱节点和后继节点,我们的代码首先建立一棵普通的二叉树,然后利用递归的fangsh原创 2015-08-03 14:34:36 · 410 阅读 · 0 评论 -
打印二叉树中一个节点的所有祖先节点
在二叉树中找到一个节点的祖先节点是我们常用的一个算法,今天我们就来介绍两种不同的方式,一种代码简单但是效率较低,用到了递归,另一种代码复杂但是效率较高,利用非递归的后序遍历递归方式的代码如下 public boolean ancestor(Node node,int x){ if (node==null){ return false; } else原创 2015-08-01 09:54:55 · 8224 阅读 · 2 评论 -
测试一棵二叉树是否为完全二叉树
完全二叉树的定义我就不说了,可以去百度,这里的思想是,在检测到某节点A的左孩子或者右孩子为空后将标志位置0,如果在这之后又检测到其他节点左孩子或者右孩子非空,那么就可以判断这不是一棵完全二叉树。为了达到从上到下,从左往右的扫描顺序,我们使用层次遍历。代码如下 /** * 检测一棵树是不是完全二叉树 * 这里采用层次遍历在遍历到某节点的子节点空时将flag置为0,之后若有其他原创 2015-08-01 09:13:53 · 495 阅读 · 0 评论 -
求一棵二叉树的宽度
二叉树的宽度是指具有节点数最多的那一层的结点个数,我们的算法利用层次遍历求出一棵二叉树的宽度,思路在于每次遍历一个节点时递增count,当结束对某一层的遍历后就将该count值与max值相对比,保存较大值。以下就是代码: /** * 求出一棵二叉树的宽度 */ public int getWidth(Node node){ Node qu[]=new原创 2015-08-01 13:46:14 · 731 阅读 · 0 评论 -
二叉树左右子树的交换
这是一个很老的问题了,即递归的交换一棵二叉树的左子树和右子树,代码如下 public void swap(Node node){ if(node!=null){ swap(node.left); swap(node.right); Node t=node.left; node.left=node.right; node.ri原创 2015-08-01 09:56:52 · 2040 阅读 · 0 评论 -
java二叉树创建的第二种模型
朋友们如果看了我的上几篇博客,应该都会记得我利用工厂类和静态方法创建二叉树的方式,我们今天就介绍一种更加“面向对象“的二叉树创建方式,这种利用内部类创建的二叉树访问起来更加方便,代码如下public class BinaryTree { private Node root; /** * * 内部节点类 * @autho原创 2015-08-01 10:06:38 · 516 阅读 · 0 评论 -
判断两棵二叉树是否相似
所谓两棵二叉树相似是指T1与T2都是空的二叉树或者都只有一个根结点,或T1的左子树和T2的左子树是相似的,且T1的右子树和T2的右子树是相似的,自然用到了递归的方法上代码/** * 用来判断两个二叉树是否相似(相似是指树的结构完全相同) * @param n1 * @param n2 * @return */ public stat原创 2015-08-01 10:01:53 · 3334 阅读 · 0 评论 -
java中二叉树的创建以及几个常用的函数
二叉树是我们在编程过程中常用的数据模型,但是java本身并没有提供简单的二叉树类以供调用,今天我们就自己写了一个BinaryTreeFactory类,用来创建一棵二叉树,并且提供先序遍历,中序遍历,后序遍历,层次遍历这几种不同的遍历方式。废话不多说,上代码首先是二叉树的节点类,你可以将它写成内部类的形式/** * * @author yyd *二叉树的节点类 */publi原创 2015-07-31 17:34:00 · 1711 阅读 · 0 评论 -
给出一棵二叉树的根节点和其中两个不同的节点求出它们最近的公共祖先节点
如题,这是一个很老的问题,我们采用类似后序遍历的方式,在找到一个节点后保存栈中的节点,已得到一条从根节点到当前节点的路径代码如下/** * 给出一棵二叉树的根节点以及其他两个不同节点,返回这两个不同节点的最近公共祖先节点 * @param n1,n2,root */ public static void getClosetAncestor(BTNode root,int n1原创 2015-08-01 15:28:27 · 506 阅读 · 0 评论 -
二叉树的三种非递归遍历算法
对于二叉树,我们自然非常熟悉它的三种递归遍历方式,但是许多朋友对三种遍历方式的非递归代码却并不熟悉,事实上这三种非递归遍历方式还是很有用的,特别是非递归的后序遍历,具有如下特点:若遍历至节点A时,该栈中的元素即为A节点的所有祖先节点,即只需要将该栈打印出来,就可以得到从根节点至A节点的一个路径。public class TravelSal { /** * 非递归形式的前序遍原创 2015-08-01 09:08:09 · 325 阅读 · 0 评论 -
非递归算法得出一棵树的高度
计算二叉树树高的递归算法我想各位朋友们都已经很熟悉了,那么我们今天就来介绍一种非递归的算法,主要利用的还是层次遍历/** * 得出一棵树的高度(非递归算法) */ public int getHeight(Node node){ Node[] qu=new Node[255]; Node p=node; int tail=0;原创 2015-08-01 09:30:01 · 1025 阅读 · 0 评论 -
迪卡斯特拉算法
求单源最短路径的迪卡斯特拉算法,同样直接上代码了,注意与FLOYD算法的比较package oj;/** * * @author pc *找出从端点0到其他端点的最短路径 */public class DIJKSTRA { public static void dijkstra(int[][] V,int n){ int[] X={0}; int[] Y=new原创 2015-08-09 10:50:29 · 1437 阅读 · 0 评论 -
PRIM算法
同样是求最小生成树的PRIM算法,废话不多说了,直接上代码吧package oj;class Edge2{ int x1; int x2; int len; public Edge2(int x1, int x2, int len) { this.x1 = x1; this.x2 = x2; this.len = len; } public int getX1(原创 2015-08-09 10:48:18 · 465 阅读 · 0 评论 -
KRUSKAL算法
图的KRUSKAL算法是用以求解最小生成树的一种有效算法,每次从待选的边中选出最短的那一条边,加入到已有的树中,读者可以与PRIM算法相比较他们之间的异同,下面是代码,该代码利用堆排序以求能在较短时间内取出最短的那一条边。package oj;class Edge{ int x1; int x2; int len; public Edge(int x1, int x2, int原创 2015-08-09 10:42:32 · 346 阅读 · 0 评论 -
AVL平衡二叉树
平衡二叉树是指书中每个节点的平衡因子的绝对值小于等于1,这样可以保证在o(logn)时间内查找到某个元素,这种树的代码较为复杂。public class AVLTree { private Entry root = null; /** * 树中元素个数 */ private int size = 0; pub原创 2015-08-04 16:55:32 · 281 阅读 · 0 评论