- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 树与二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.5 赫夫曼树及其应用 一、树的定义 定义:树(Tree)是n(n=0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件: 有且仅有一个特定的称为根(root)的结点; 其余的结点可分为m(m=0)个互不相交的子集T1,T2,T3…Tm,其中每个子集又是一棵树,并称其为子树(Subtree)。 二、树的基本操作 InitBiTree(T)初始化一棵空树T。 Root(x)或Root(t)求结点x所在树的根结点。 Parent(t,x)求树t中结点x的双亲结点。 Child(t,x,i)求树t中结点x的第i个孩子结点。 RightSibling(t,x)求树t中结点x的第一个右边兄弟结点。 Insert(t,x,i,s)把以s为根结点的树插入到树t中作为结点x的第i棵子树。 Delete(t,x,i)在树t中删除结点x的第i棵子树。 Tranverse(t)是树的遍历操作,即按某种方式访问树t中的每个结点,且使每个结点只被访问一次。 CreateTree(x,F)建树 Clear(t) 清空 三、树的基本术语 结点:包含一个数据元素及若干指向其子树的分支 结点的度:结点拥有的子树数 叶结点:度为0的结点[没有子树的结点] 分支结点:度不为0的结点[包括根结点],也称为非终端结点。除根结点之外,也称为内部结点。 三、 树的基本术语 孩子:结点的子树的根[直接后继,可能有多个] 双亲:孩子的直接前驱[最多只能有一个] 兄弟:同一双亲的孩子 子孙:以某结点为根的树中的所有结点 祖先:从根到该结点所经分支上的所有结点 层次:根结点为第一层,其孩子为第二层,依此类推 深度:树中结点的最大层次 森林:互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。 无序树:各子树次序可互换 有序树:各子树次序不可互换 第6章 树与二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.2.1 定义与基本操作 6.2.2 二叉树的性质 6.2.3 二叉树的存储结构 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.5 赫夫曼树及其应用 6.2 二 叉 树 6.2.1 二叉树的定义 一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成 二叉树的子树是有左、右之分,不能颠倒 ADT BinaryTree (略) 一、顺序存储结构 用一组连续的存储单元依次自上而下,自左至右存储结点(仅适用于完全二叉树) 设计不同的节点结构可构成不同形式的链式存储结构 1.二叉链表 数据域+左孩子指针+右孩子指针 2.三叉链表 数据域+左孩子指针+右孩子指针+父结点指针 3.线索链表 二叉链表中的空链域存储其它有用信息 二叉树的二叉链表存储表示: typedef struct BiTNode{ TElemType data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; 第6章 树与二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.3.1 遍历二叉树 6.3.2 线索二叉树 6.4 树和森林 6.5 赫夫曼树及其应用 6.3.1 遍历二叉树 树的遍历就是按某种次序访问树中的结点,要求每个结点访问一次,且仅访问一次。 如果规定先左子树后右子树,则共有三种组合 1.DLR [先序遍历] 2.LDR [中序遍历] 3.LRD [后序遍历] D表示访问根结点用, L、R表示遍历左、右子树 遍历用途——它是树结构插入、删除、修改、查找和排序运算的前提,是二叉树一切运算的基础和核心。 遍历方法——牢记一种约定,对每个结点的查看都是“先左后右” 。 1、先序遍历二叉树 若二叉树为空,则返回;否则: 1).访问根节点(D) 2).先序遍历左子树(L) 3).先序遍历右子树(R) 3、后序遍历二叉树 若二叉树为空,则返回;否则: 1).后序遍历左子树(L) 2).后序遍历右子树(R) 3).访问根节点(D) C语言实现二叉链表的先序遍历算法: C语言实现二叉链表的中序遍历算法 中序遍历算法的非递归描述(栈实现) 按先序次序输入二叉树中结点的值,空格字符表示空树,构造二叉树的二叉链表。 void CreatBiTreePre(BiTree t) { scanf(ch); if(ch==‘ ‘) t=NULL; else {if(!(t=(BiTNode*)malloc(sizeof(BiTNode))
原创力文档


文档评论(0)