双向循环链表操作-二叉树和树操作-图的创建及相关操作的实现(3)

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
节点,直到找到头节点为止。
Page 5
LOGO
二ຫໍສະໝຸດ Baidu树
功能
实现二叉树的层次遍历; 统计二叉树叶子结点的个数;
Page 6
LOGO
二叉树 结构简介:
节点结构为数据域,左右孩子节点域,整棵二叉树由根节点向下构建
Page 7
LOGO
二叉树
方法简介:
二叉树的层次遍历 cerateBTByPreOrder(AnyType[] preOrder) 利用带空的先序遍历结
网络121 陈光川
双向循环链表
功能: 建立一个空表。 插入第i个结点。 删除第i个结点。 插入第1个结点。 插入最后一个结点。 就地逆置
Page 2
LOGO
双向循环链表
结构简介:
每个节点定义有前驱和后继节点域,从而构成双向循环链表结构。
Page 3
LOGO
双向循环链表
函数或类的具体定义和功能 CycleList() 构造方法 createList(AnyType[] a) 创建链表 getNode(int idx) 得到第idx个节点 insertNode(int idx,AnyType data) 插入第idx个节点 deleteNode(int idx) 删除第i个节点 insertFirstNode(AnyType data) 插入第一个节点 insertLastNode(AnyType data) 插入最后一个节点 reverseList() 就地逆置链表 printList() 输出链表
果创建二叉树 levelOrder(BTNode<AnyType> root) 实现二叉树的层次遍历
统计叶子节点数目 cerateBTByPreOrder(AnyType[] preOrder) 利用带空的先序遍历结
果创建二叉树 countLeaf(BTNode<AnyType> rootNode) 实现统计叶子节点数目
Page 4
LOGO
双向循环链表
算法思想:
• 首先建立一个前驱和后继相互链起来的双向循环链表。 • 然后遍历数组,逆序建立链表。 • 插入顶点时,对插入顶点的特殊位置进行考虑,如头结点位置之后元素的插
入。 • 删除节点时,首先得到该节点的前一个节点,然后将得到的节点与要删除节
点的后一个节点相连接。 • 就地逆置过程,直接从尾节点的前一个节点开始,循环遍历找每个节点的前
Page 18
LOGO
图 功能
1、存储结构转换 2、增加顶点和删除顶点
Page 19
LOGO
图 结构简介:
• 该图为有向图结构, 有两种常见的结构来存储 该图。
Page 20
LOGO

结构简介:









Page 21

图 的 邻 接 表 存 储 结 构
LOGO

方法简介:
存储结构转换 menu1() 创建图,返回图的邻接矩阵 converse2List(int[][] graph,int vexnum) 转换为邻接链表存储结构 converse2InverseList(int[][] graph,int vexnum) 转换为逆邻接链
LOGO

算法思想:
存储结构转换
创建图返回图的邻接矩阵 转换为邻接链表存储结构,图的邻接矩阵数组 顶点数目弧的数目 转换为逆邻接链表存储结构
ParentsTree() 构造方法
addPTNode(PTNode<AnyType> ptnode)添加节点
printTree( ) 输出树
preOrder( ) 先根遍历
孩子链建立树
ChildrenTree() 构造函数
PTListNode(AnyType data) 定义双亲节点
CTNode(int child) 定义孩子节点
Page 8
LOGO
二叉树
算法思想:
层次遍历
用一个队列保存被访问的当前节点的左右孩子以实现层序遍 历。
创建一个队列 将根放入队列; while(队列非空) { 从队列取出一个元素并访问; 如果该元素有左子树就将它放入队列; 如果该元素有右子树就将它放入队列; }
Page 9
LOGO
二叉树
统计叶子节点数目
Page 16
LOGO

孩子兄弟表示法
每个结点除存储本身的信息外,还有两个引用域分别 存储该结点第一个孩子的地址信息和下一个兄弟的地址信 息。
Page 17
LOGO

孩子链表示法
孩子链表表示法中的结点除保存本身的信息外,不是 保存其双亲结点在数组中的序号,而是保存一个链表的第 一个结点的地址信息。这个链表是由该结点的所有孩子结 点组成。每个孩子结点保存有两个信息,一个是每个孩子 结点在一维数组中的序号,另一个是下一个孩子结点的地 址信息。
levelOrder() 层次遍历
孩子-兄弟表示法建立树
createTreeByChildAndBrother() 构造方法
preOrder() 先序遍历
Page 15
LOGO
树 双亲表示法
算法思想
从树的定义可知,除根结点外,树中的每个结点都有唯一的一个双亲 结点。根据这一特性,可用一组连续的存储空间(一维数组)存储树 中的各结点。树中的结点除保存结点本身的信息之外,还要保存其双 亲结点在数组中的位置(数组的序号)
Page 10
LOGO

功能
分别使用双亲表示法、孩子链表、孩子-兄弟表示法建立 树,并输出任一种遍历序列检查所建树的正确性
Page 11
LOGO
树 结构简介
树的双亲表示法
Page 12
LOGO

孩子链表表示法
Page 13
LOGO

树的孩子兄弟存储表示法
Page 14
LOGO

方法简介
双亲表示法建立树
采取的方法就是利用函数返回值.把函数定义为返回值为int型的 函数.然后进行判断:如果左右结点都为NULL,则返回1(也就是计数+1). 否则调用递归函数,先左子树,后右子树.这个算法真正精髓的一句就是: return leafLeft+leafRight;
在调用递归的同时把各个递归函数的返回值都加了起来.而最终返 回到主函数的值,就是叶子节点的个数
表存储结构 orthogonalList(int[][] graph,int vexnum) 转换成十字链表存储
增加顶点和删除顶点 menu() 创建图 delete(int idx) 删除节点 add(AnyType data) 增加节点 printGraph() 输出图结构
Page 22
相关文档
最新文档