java算法:树与二叉树

java算法:树

树是一种数学抽象,它在算法设计和分析中起着重要的作用:使用树来描述算法的动态特性,构建和使用明确的数据结构是树的具体实现。

在计算机应用中,树结构的一种最熟悉的应用是用来组织文件系统。

树的类型:树,有根的树,有序树,M叉树和二叉树。

二叉树是特殊类型的有序树,有序树是特殊类型的有根树,而有根树又是特殊类型的树。不同类型的树自然出现在不同的应用中。

二叉树是一个外部结点或者连接到一对二叉树的内部结点,那对二叉树称为那个结点的左子树和右子树。

Java代码 复制代码
  1. class Node{   
  2.     Item item;   
  3.     Node l;   
  4.     Node r;   
  5.     Node(Item item, Node l, Node r){   
  6.         this.item = item;   
  7.         this.l = l;   
  8.         this.r = r;   
  9.     }   
  10. }  

表示沿着树向下移动的操作,但不能有效实现要求从孩子移到双亲的操作,可以在每个结点增加第三个指针,指向双亲。

一棵M叉树或者一个外部结点,或者连接到M棵树的有序序列的内部结点。

通常把M叉树中的结点表示为具有M个命名指针的结构,或具有M个指针的数组。

一棵树(有序树)是一个连到一序列不相交树的结点,这样的一种树序列称为森林。

有序树和M叉树之间的区别在于有序树中的结点可有任何数目的孩子,而M叉树中的结点必须有M个孩子。

由于有序树中的每个结点都有任何数目的指针,所以使用链表。每个结点包含两个指针,指向兄弟的链表和孩子的链表。

在二叉树和有序森林之间存在一对一的对应。

一棵有根树(无序树)是连到一个多集合的有根树的一个结点(根),这个的一个多集合称为无序森林。

图是由一个顶点集和一边集构成的,边连接了不同结点对。

每一棵树都是一幅图,如果G有N-1条边且没有回路,且是连通的,G中每一对顶点正好有一条简单路径把它们连起来,G是连通的,但如果删除任一条边,则它不是连通的,就是树。

在研究算法的时候,考虑树的一些基本性质,是很有必要的。

java算法:二叉树

在算法设计中,二叉树是比较频繁使用的,理解好它的性质,二叉树也是一种数据结构。

有N个内部结点的二叉树有N+1个外部结点。

证明:二叉树没有内部结点,N = 0, 外部结点为1,成立。当N > 0,任何有N个内部结点的二叉树,左子树有k个内部结点,右子树有N - K - 1个内部结点,k 在 0 与 N - 1之间, 因为根是内部结点,通过假设,左子树有k + 1个结点,右子树有N - k个外部结点,总共有 N + 1个外部结点。

有N个内部结点的二叉树有2N个指针:N-1个指针指向内部结点,N+1个指针指向外部结点。

在任何有根树中,除了跟之外,每个结点都有唯一的双亲,每条边都把一个结点连接到它的双亲结点上,所以连接内部结点的指针有N-1个。类似的,N+1个外部结点中的每一个都有一个指针,指向它唯一的双亲。

树中一个结点的层次比它的双亲结点的层次要高一层(根在0层)。树的高度是树中结点层次的最大值。树的路径长度是树中所有结点层次之和。二叉树的内部路径长度是树中所有内部结点的层次之和。二叉树的外部路径长度是树中所有外部结点的层次之和。

计算树的路径长度的一个快捷方法是对多所有的k,对k与层次k上的结点树之积求和。

对于很多递归计算,对应树的高度就是递归的最大深度,或者支持计算所需要的栈的大小。

具有N个内部结点的任何二叉树的外部路径长度比内部路径长度大2N。

具有N个内部结点的二叉树的高度至少是lgN,至多是N-1。

最坏的情况只有一个叶子的退化树,从根到这个叶子有N-1个指针。最好的情况是一棵平衡树,在每一层i上都具

有2的i次方个内部结点(除了低层之外),如果高度是h,则必须有:

2h-1<N+1<2h

这个等式说明:最好情况下的高度刚好等于对lgN四舍五入得到的最近的整数值。

具有N个内部结点的二叉树的内部路径长度至少是Nlg(N/4),至多是N(N-1)/2。

二叉树广泛的应用在计算机中,当二叉树完全平衡时,性能是最好的。

注意:内部结点,外部结点;根,叶子;双亲,结点,孩子,兄弟,叶子。

 

posted on 2012-11-01 09:59  吴一达  阅读(387)  评论(0编辑  收藏  举报

导航