第四章 树和二叉树 知识点

树的基本术语

结点的度 : 某节点所拥有的子树的个数
树的度 : 树中各结点度的最大值
叶子结点 : 度为 0 的结点
孩子结点 : 某结点的子树的根节点 ; 
    反之, 结点称为子树的 双亲结点
祖先 : 如果从 x 到 y 有一条路径, x 是 y 的祖先
树的深度/树的高度 : 树中所有结点的最大层数
树的宽度 : 树中每一层结点个数的最大值
P 108~109

树的存储结构

P 110

双亲表示法

data 为存储树中结点的数据信息 ;

parent 为存储该结点的双亲在数组中的下标.

#define MaxSize 100
typedef char DataType;
typedef struct{
    DataType data; // 树结点的数据信息
    int parent; // 该结点的双亲在数组的下标
} PNode;

typedef struct{
    PNode tree[MaxSize];
    int treeNum; // 树的结点个数
} PTree;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这种存储结构容易找到结点的双亲结点 , O ( 1 ) O(1) O(1) ; 但很难找到孩子结点

孩子表示法

树的 孩子表示法 是一种基于链表的存储方法, 即把每个结点的孩子排列起来, 看成一个线性表, 且以单链表存储, 称为该结点的孩子链表。 (二叉链表)

#define MaxSize 100
typedef char DataType;
typedef struct ChildNode{ // 定义孩子结点
    int child; // 该结点在表头数组的下标
    struct ChildNode *next;
} ChildNode;
typedef struct{ // 定义表头结点(双亲结点)
    DataType data;
    ChildNode *firstchild;
} TreeNode;
typedef struct{ // 树结构
    treeNode tree[MaxSize];
    int treeNum; // 数的结点个数
} CTree;

孩子表示法不仅表示了孩子结点的信息 , 而且链在同一个孩子链表的结点具有兄弟关系

示意图 : P111

孩子兄弟表示法

又叫二叉链表表示法

链表中每个结点的指针域分别指向第一个孩子结点和此节点的下一个兄弟结点

typedef char DataType;
typedef struct CSNode{
    DataType data;
    struct CSNode* firstchild, *rightsib;
} CSNode;
CSNode *root; // 定义根节点
struct CSNode* firstchild, *rightsib;

} CSNode;
CSNode *root; // 定义根节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值