zoukankan      html  css  js  c++  java
  • 二叉树及各种二叉树的应用

    二叉树也是递归定义的,其结点有左右子树之分:

    (1)  完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树
    (2)  满二叉树——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
    (3)  深度——二叉树的层数,就是高度。
    1、二叉树的存储结构
        (1)顺序存储结构(适合完全二叉树和满二叉树)
        (2)链式存储结构(适合非完全二叉树)
    2、二叉树的遍历
        (1)递归遍历(中序遍历、先序遍历、后序遍历)
        (2)非递归遍历(利用堆栈实现)
    3、二叉树的拓展
        (1)线索二叉树(在节点空指针域存放前驱和后继节点的指针,加上线索标志域区分是线索指针还是child指针;建立线索二叉树,实质上就是遍历一颗二叉树,在相应的指针域进行操作)
        (2)二叉排序树(了解生成过程)
        (3)最优二叉树(哈夫曼树):对于一组有确定权值的叶子节点,构造的具有最小带权路径长度的二叉树(典型应用:哈夫曼编码)
        (3)平衡树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。(防止退化为链表,提高搜索效率)
        (4)红黑树:红黑树是平衡二叉树的一种;它有很好的性质,树中的结点都是有序的,而且因为它本身就是平衡的,所以查找也不会出现非常恶劣的情况,基于二叉树的操作的时间复杂度是O(log(N))。Linux内核在管理vm_area_struct时就是采用了红黑树来维护内存块的。
    比较好的文章推荐:
  • 相关阅读:
    ubuntu14.04通过将语音,耳机没有声音
    网络编程easy错误点-手知道
    如何实现网页在线咨询框架
    C++定义自己的命名空间和头文件
    使用光标
    工作日两个日期之间的数
    Swift
    Swift
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/kivi/p/3189401.html
Copyright © 2011-2022 走看看