为什么会出现不同的方法?树结构中双亲链表表示法和孩子链表表示法的区别(学习笔记)

有些同学可能会在数据结构的学习中产生“为什么树结构的表示法会出现不同?”,”他们有什么区别吗?”等疑问。

其实产生这些疑问是很正常的,因为这通常代表你是在主观能动的学习,以前我也产生过类似的问题,我的老师给给我的回答是“在计算机领域中通常是只有'SOTA',而没有'Perfect'的”。即我们只有在面对单独一个问题时有目前的最优解法,而不存在适用于解决所有问题的“完美解法”。也正因如此,在实际情况中当工作人员会发现或者说创造适当的方法来解决问题。

下面我会分享一些我在学习数据结构时的笔记供大家参考。

笔记整理:

双亲链表表示法:

定义:每个节点包含指向其父节点的指针和数据。
优势: 查找父节点方便,适用于需要频繁查找父节点的情况。
示例应用:
1. 家谱系统:方便查找祖先。

2. 文件系统:便于定位文件或文件夹的父目录。

孩子链表表示法:

定义:每个节点包含指向其第一个孩子节点的指针和数据。
优势:查找孩子节点方便,存储上更为紧凑。
示例应用:

1. 组织结构:方便查找员工的下属。
2. HTML文档对象模型(DOM):便于遍历和操作DOM树。

家谱案例:

#include <stdio.h>

struct TreeNode {
    int data;
    struct TreeNode* parent;
};

// 创建一个简单的家谱树
int main() {
    struct TreeNode grandparent = {1, NULL};
    struct TreeNode parent = {2, &grandparent};
    struct TreeNode child = {3, &parent};

    // 访问父节点
    printf("%d\n", child.parent->data);  // 输出: 2

    return 0;
}

简单的公司组织结构案例: 

#include <stdio.h>
#include <stdlib.h>

struct TreeNode {
    int data;
    struct TreeNode** children;
    int child_count;
};

// 创建一个简单的组织结构树
int main() {
    struct TreeNode ceo = {1, NULL, 0};
    struct TreeNode cto = {2, NULL, 0};
    struct TreeNode cfo = {3, NULL, 0};

    // 分配内存给孩子节点
    ceo.children = (struct TreeNode**)malloc(2 * sizeof(struct TreeNode*));

    // 添加孩子节点
    ceo.children[0] = &cto;
    ceo.children[1] = &cfo;
    ceo.child_count = 2;

    // 访问孩子节点
    printf("%d\n", ceo.children[0]->data);  // 输出: 2

    // 释放内存
    free(ceo.children);

    return 0;
}

学习笔记,如有错误请斧正。

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值