第五章学习小结

整理一下第五章学到的知识

树的基本概念
节点:节点包括一个数据元素及若干指向其他子树的分支。
节点的度:节点所拥有子树的个数称为节点的度。
叶节点:度为0的节点成为叶结点,叶结点也称为终端节点。
分支节点:度不为0的节点称为分支节点,分支节点又称非终端节点。一棵树中排除叶结点外的所有节点都是分支节点。
祖先节点:从根节点到该节点所经分支上的所有节点。
子孙节点:以某节点为根节点的子树中所有节点
双亲节点:树中某节点有孩子节点,则这个节点称为它孩子节点的双亲节点,双亲节点也成为前驱节点。
孩子节点:树中一个节点的子树的根节点称为该节点的孩子节点,孩子节点也称为后继节点。
兄弟节点:具有相同双亲节点的节点称为兄弟节点。
树的度:树中所有节点的度的最大值成为该树的度。
节点的层次:从根节点到树中某节点所经路径上的分支也称为该节点的层次,根节点的层次为1,其他节点层次是双亲节点层次加1.
树的深度:树中所有节点的层次的最大值称为该树的深度。

树的存储结构

顺序存储结构:对于一棵完全二叉树所有节点按照层序自顶向下,同一层自左向右顺序编号,就得到一个节点的顺序序列。

优点:存储完全二叉树,简单省空间 
缺点:存储一般二叉树尤其单支树,存储空间利用不高。

二叉树的顺序存储,寻找后代节点和祖先节点都非常方便,但对于普通的二叉树,顺序存储浪费大量的存储空间,同样也不利于节点的插入和删除。因此顺序存储一般用于存储完全二叉树。

链式存储结构:链式存储相对顺序存储节省存储空间,插入删除节点时只需修改指针,但寻找指定节点时很不方便。不过普通的二叉树一般是用链式存储结构。

下面是4种具体的存储方法及其对应代码:

双亲表示法,孩子表示法,双亲孩子表示法,孩子兄弟表示法。

(1)双亲表示法。这种存储方式采用一组连续的空间来存储每个结点,同时在每个结点中增设一个伪指针,
指示其双亲在结点中的位置。这种方式比较容易找到双亲,但是不容易找到孩子。Vi

typedef int datatype;
struct node{
    struct node* parent;//指向双亲节点
    datatype data;//节点中的数据
};
View Code

(2)孩子表示法。这种方法是将每个结点的孩子结点都用链表链接起来形成一个线性结构。这种方式比较
容易找到结点的孩子,但是不容易找到其双亲。

typedef int datatype;
struct Node{
    struct Node* child1;
    struct Node* child2;
    datatype data;
};
View Code

(3)双亲孩子表示法:用指针既表示出每个节点得双亲节点,也表示出每个节点的孩子节点。即双亲表示法+孩子表示法。优点是找某个节点的双亲节点和孩子节点非常方便。

typedef int datatype;
struct Node{
    struct Node* Parent;
    struct Node* child1;
    struct Node* child2;
    datatype data;
};
View Code

(4)孩子兄弟表示法。这种方式通俗的说是:“左结点是第一个孩子,右结点是下一个兄弟”。这种方式比较灵活,因为其可以转化为二叉树,对其的操作一般都能转化为二叉树的相关操作。

typedef int datatype;
struct node{    
    struct node* child1;//第一个孩子节点
    struct node* brother;//指向其下一个兄弟节点
    datatype data;//节点中的数据域
};
View Code

二叉树
一棵二叉树是节点的一个有限集合,该集合或者为空,或者是由一个根节点加上两颗分别称为左子树和右子树的二叉树组成。每棵子树的根节点有且只有一个前驱,可以由0个或多个后继。因此,树是递归定义的。

每个节点最多有两棵子树,即二叉树不存在度大于2的节点。二叉树的子树有左右之分,其子树的次序不能颠倒。

满二叉树:在一棵二叉树中,如果所有分支节点都存在左子树和右子树,而且所有叶子节点都在同一层上。
完全二叉树:如果一棵具有N个节点的二叉树的结构与满二叉树的前N个节点的结构相同,称为完全二叉树。满二叉树是特殊的完全二叉树。

二叉树的遍历

遵循某种次序,遍历二叉树中的所有节点,使得每个节点被访问一次,而且仅访问一次。“访问”:即对节点施行某些操作。

先序遍历:先访问根节点,再访问左子树,最后访问右子树。
中序遍历:先访问左子树,再访问根节点,最后访问右子树。
后序遍历:先访问左子树,再访问右子树,最后访问根节点。
层序遍历:同一层中按左子树再右子树的次序遍历,从根节点层到叶节点层访问。

 

 

posted @ 2019-05-04 23:33  07-14  阅读(169)  评论(1编辑  收藏  举报