数据结构(5.4_1)——树的存储结构

树的逻辑结构

双亲表示法(顺序存储)

每个结点中保存指向双亲的"指针"

cpp 复制代码
#define MAX_TREE_SIZE 100//树中最多结点

typedef struct {//树的结点定义
    int data;//数据元素
    int parent;//双亲位置域
}PTNode;
typedef struct {//树的类型定义
    PTNode nodes[MAX_TREE_SIZE];//双亲表示
        int n;//结点数
}PTree;

增加结点操作

新增数据元素无需按逻辑上的次序存储,之家在上一个结点后添加新结点,并记录双亲结点

删除叶结点操作

1、删除结点数据域

2、将尾部数据移动至删除结点位置填充空缺

删除非叶结点操作

寻找其双亲结点相同的结点

孩子表示法 (顺序+链式存储)

顺序存储各个节点,每个结点中保存孩子的链表头指针

cs 复制代码
#define MAX_TREE_SIZE 100//树中最多结点

struct CTNode {
    int child;//孩子在结点数组中的位置
    struct CTNode* next;//下一个孩子
};
typedef struct {
    int data;
    struct  CTNode* firstChild;//第一个孩子
}CTBox;
typedef struct {
    CTBox nodes[MAX_TREE_SIZE];
    int n, r;//结点数和根的位置
}CTree;

孩子兄弟表示法(链式存储)

cpp 复制代码
/树的存储------孩子兄弟表示法
typedef struct CSNode {
    int data;
    struct CSNode* firsitchild, * nextsilbling;//第一个孩子和右兄弟指针
}CSNode,*CSTree;
int main() {

    return 0;
}

树和二叉树的转化:

使用孩子兄弟表示法

森林和二叉树的转化

森林--->二叉树

二叉树--->森林

总结:

相关推荐
Herbert_hwt8 小时前
C语言零基础入门:循环控制与数据类型详解
c语言·数据结构·算法
晚风醉蝶9 小时前
1-6-插入排序-InsertionSort
java·数据结构·排序算法
Tyler_TXZ10 小时前
C++C语言之——二叉树
c语言·开发语言·数据结构·c++·二叉树
有点。10 小时前
C++二叉树二(练习题)
数据结构·c++·算法·图论
LuminousCPP10 小时前
栈和队列专题(一):LeetCode 20. 有效的括号
数据结构·经验分享·笔记·leetcode·手写栈
白狐_79812 小时前
408 数据结构|线索二叉树两题详解:先序线索化后的空链域 + 中序前驱/后继判断
c语言·数据结构·链表
疯狂打码的少年13 小时前
【数据结构】二叉排序树(BST)的定义与操作
数据结构·笔记·算法
wabs66613 小时前
关于字符串【力扣541.反转字符串II的思考】
数据结构·算法·leetcode·字符串
旖旎夜光15 小时前
LeetCode 30:串联所有单词的子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
白狐_79815 小时前
408 数据结构|完全二叉树两道典型题:第 6 层叶结点数与叶结点总数
数据结构·算法