数据结构之树
一、森林和树
树:是n(n>=0)个结点的有限集。若 n = 0,称为空树
森林:是m(m>=0)棵互不相交的树的集合
1.树的存储结构
实现:
1.双亲表示法
定义结构数组,存放树的结点,每个结点包含两个域:数据域:存放结点本身信息
双亲域:指示本结点的双亲结点在数组中的位置
找双亲任意,找孩子难
2.孩子链表
把每个结点的孩子结点排列起来,看成是一个线性表,用单链表存储,则n个结点有n个孩子链表(叶子的孩子链表为空表)。而n个头指针又组成一个线性表,用顺序表(含n个元素的结构数组)储存
找孩子容易,找双亲结点比较难
3.带双亲的孩子链表
将双亲法和孩子链表结合起来,有牺牲空间换时间的方法。
4.孩子兄弟表示法(二叉树表示法,二叉链表表示法)
实现:用二叉链表作树的存储结构,链表中每个结点的两个指针域分别指向其第一个孩子结点和下一个兄弟结点
2.数的操作
一般将数转化为二叉树进行处理,利用二叉树的算法来实现对树的操作
由于树和二叉树都可以用二叉树链表作存储结构,则以二叉链表作媒介可以导出树与二叉树之间的一个对应关系
2.树的遍历
树的遍历有三种:先根遍历,中根遍历,后根遍历
一般将森林看作三部分:1.森林中第一颗树的根节点,2.森林中第一颗树的子树森林3.森林中其他树构成的森林
即依次从左至右对森林中的每一颗树进行先根遍历。
根据遍历的顺序来选择每部分遍历的先后顺序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本