zoukankan      html  css  js  c++  java
  • 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。

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

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

  • 相关阅读:
    paip.注册java程序为LINUX系统服务的总结。
    paip.Log4j配置不起作用的解决
    paip.获取地理位置根据Ip
    paip.抓取网页内容--java php python
    paip.java 开发中web server的选择jboss resin tomcat比较..
    paip.c++ 转换 java 解决方案
    paip.java c# .net php python调用c++ c dll so windows api 总结
    SVN的405错误
    怎样开启SQL数据库服务
    C#中读取二维数组每位的长度
  • 原文地址:https://www.cnblogs.com/wuyida/p/6301144.html
Copyright © 2011-2022 走看看