zoukankan      html  css  js  c++  java
  • 树的基本知识

    1.树的定义:

    (1)有且只有一个称为根的节点。

    (2)有若干个互不相交的子树,这些子树本身也是一棵树。

    eg:

    2.通俗的定义:

    (1)树由节点和边组成。

    (2)每个节点只有一个父节点但可以有多个子节点。

    (3)根节点没有父节点。

    3.树的一些名词:

    (1)节点

    (2)父节点

    (3)子节点

    (4)子孙

    (5)堂兄弟

    (6)深度:从根节点到最低层节点的层数称之为深度,根节点是第一层。

     (7)叶子节点:没有子节点的节点。

    (8)非终端节点:即非叶子节点。

    (9)度:子节点的个数成为度。(树的度为整个树中含有最多子节点的个数。)

     

    4.树的分类:

    (1)一般树:任意一个节点的子节点个数都不受限制。

    (2)二叉树:(有序树)任意节点的子节点个数最多只有两个,且子节点的位置不可更改。(左子节点,右子节点的位置不可更改)

    二叉树的分类:

    a.一般二叉树

    b.满二叉树:在不增加树的层次的前提下,无法再添加一个节点的二叉树。

     (3)完全二叉树:如果只是删除满二叉树最底层最右边的连续若干个节点,这样形成的二叉树就是完全二叉树。

    eg:

    满二叉树是完全二叉树的一个特例。

     

     5.树的存储

    (1)二叉树的存储

    a.连续存储(完全二叉树)

    b.链式存储

     

    eg:如果只是保存树的有效节点,无法知道原本的树的结构。

    6.二叉树是非线性的数据结构,在存储时,把非线性转化为线性,有以下三种方法:

    (1)先序遍历

    (2)中序遍历

    (3)后序遍历

     

    7.将普通树转化为完全二叉树,用数组来存储二叉树的优点:

    (1)已知节点的个数就可以知道层数。

    (2)已知节点的编号,可以知道父节点和子节点。

    (3)查找某个节点的父节点和子节点。(包括判断有没有)

     

    缺点:占用内存过大。

     

    8.链式存储

    n个节点,浪费n+1空间(线性浪费)。

     

    9.一般树的存储

    (1)双亲表示法(求父节点方便)

    (2)孩子表示法(求子节点方便)

    (3)双亲孩子表示法(求父节点和子节点都方便)

    (4)二叉树表示法(也叫孩子兄弟链表表示法)

                 把一个普通树转化为二叉树来存储。具体的转化方法:设法保证任意一个节点的左指针域指向它的第一个孩子,右指针域指向它的下一个兄弟。

     

     

     

    eg:

    10.森林的存储——转化为二叉树存储

    以下三棵树组成森林:

    转化为二叉树:

    11.二叉树的操作

    (1)遍历。

    (2)已知两种遍历序列求原始二叉树。

    12.遍历分以下三种:

    (1)先序遍历:先访问根节点,再先序访问左子树,再先序访问右子树。

    先序:A-B-D-E-C-F-G

    (2)中序遍历:[中间访问根节点]中序遍历左子树,再访问根节点,再中序遍历右子树。

    eg:

    中序:B-D-C-E-A-L-F-N-Q-M

    eg:

    中序:B-D-C-A-M-Q-E-L-N

    (3)后序遍历:[最后访问根节点]先后序遍历左子树,在后序遍历右子树,再访问根节点。

    eg:

    后序:B-D-M-F-L-E-C-A

    13.已知两种遍历序列求原始二叉树                           

          已知先序遍历和中序遍历,或是已知中序遍历和后序遍历可以推算出原始二叉树。注意:已知先序和后序是不能推算出原始二叉树的。

    eg:(1)已知先序和中序求后序。

    先序:ABCDEFGH

    中序:BDCEAFHG

    求后序?

    解题思路:先序中最先出现的是根节点,从中序可以确定左右子树,然后再在先序中确立接下里的根节点。

    后序:DECBHGFA

    (2)已知中序和后序求先序。

    中序:BDCEAFHG

    后序:DECBHGFA

    求先序?

    解题思路:先根据后序找到根节点,然后根据中序找到左右子树,在后序中最后出现的为根节点。

    先序:ABCDEFGH

    14.树的应用

    (1)树是数据库中数据组织的一种重要形式。eg:图书馆图书的分类。

    (2)操作系统子父进程的关系本身就是一棵树。

    (3)面向对象语言中类的继承关系本身就是一棵树。

    (4)赫夫曼树。

  • 相关阅读:
    阅读计划博文
    系统设计时所实现的质量属性战术
    关于如何提高系统的可用性和易用性
    jdbc.properties
    JDBCUtil
    软件质量属性的场景描述
    架构漫谈阅读笔记
    软件架构师工作过程
    orm框架中entityframework的 增删改查操作
    事件和委托
  • 原文地址:https://www.cnblogs.com/LinSL/p/6375083.html
Copyright © 2011-2022 走看看