| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【Day10·超详细】数据结构 之 树和森林 -> 正文阅读 |
|
[数据结构与算法]【Day10·超详细】数据结构 之 树和森林 |
作者:recommend-item-box type_blog clearfix |
导读本篇文章将会介绍树的三种存储方式(双亲表示(顺序)、孩子表示(顺序+链式)、孩子兄弟表示法(链式))、二叉树和森林的转换、树和森林的遍历,并会给出完整的伪代码供读者参考 树的三种表示方法对于二叉树,我们最常用的是二叉链表,但对于普通的树,每一个结点可以有多个孩子,在此有三章方法去表示,下面将一一介绍: 1.双亲表示法:
这种表示方法实际上就是一个结构体数组,每一个元素中包含了两个成员,一个是char型,存储数据内容,一个是int型,保存双亲的序号,如上图所示。 2.孩子表示法 孩子表示法是一种顺序存储与链式存储相结合的存储方式,如下图所示: ?首先我们定义孩子结点CTNode:
再定义每一个元素的“块”:
最后定义整个树:
3.孩子兄弟表示法:
二叉树和森林转换森林就是一个及一个以上的树组成的集合,这些树不一定是二叉树 森林转换成二叉树步骤: 1.把森林中每一棵树转换为二叉树 2.将这几棵树的头结点依次相连,右边相邻的为左边的右子树 举例: 二叉树到森林就是一个逆过程 树和森林的遍历?对于树的遍历,仅分为两种,先根和后根遍历 以先根为例讲解(后根自己类比) 先根就是先访问根结点,然后依次对子树访问: 比如,对于: ? ? ? ? ? ? ? ? ? a ? ? b? ? ? ? ? ? ?c? ? ? ? ? ?d ? e? ?f? ? ? ? ?g? ? ? ? ? ?h? ? i j? ? ? ? ? ? ? ?k 的先根遍历为a b e j f c g k d h i 实现思路最简单的还是使用递归 大体思路如下:
至于子树的寻找,与存储方式有关,在这里面,当然是孩子链表方法比较简单,但下面我将以孩子兄弟表示为例,分享一下我的思路: 首先我想附设一个函数 CSTree nextchild(int i,CSTree T) 这个函数返回结点T的子树,i表示第几棵子树,完整代码如下:
最后看森林遍历,森林分成三个部分: 第一棵树的根节点 第一棵树的子树 除第一棵树的其它树 由此分成了先序和中序遍历 先序: 先访问第一个树根节点再第一棵树的子树再除第一棵树的其它树 相当于对每一棵树先序遍历 中序 先访问第一棵树的子树再第一棵树的根节点再除第一棵树的其它树 相当于对每一棵树后序遍历 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:37:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |