第7讲线索二叉树课件.ppt
《第7讲线索二叉树课件.ppt》由会员分享,可在线阅读,更多相关《第7讲线索二叉树课件.ppt(30页珍藏版)》请在三一办公上搜索。
1、第7讲 线索二叉树,冯广慧 讲授,第7讲 线索二叉树冯广慧 讲授,第6章 树,6.1 树的概念及操作6.2 二叉树 6.2.1 二叉树的概念及操作 6.2.2 二叉树的性质6.2.3 二叉树的存储结构6.3 二叉树的遍历6.4 线索二叉树6.5 树和森林 6.5.1 树的存储结构 6.5.2 森林、树、二叉树的相互转换 6.5.3 树和森林的遍历6.6 哈夫曼树及其应用 6.6.1 最优二叉树(哈夫曼树)6.6.2 哈夫曼编码*6.7算法设计举例,2,第6章 树6.1 树的概念及操作2,主要内容,知识点树和二叉树定义二叉树的性质,存储结构二叉树的遍历及遍历算法的应用*线索二叉树二叉树和树及森林
2、的关系Huffman树与Huffman编码重点难点二叉树的性质及应用二叉树的遍历算法及应用*线索二叉树的算法Huffman树的构造方法树的算法,3,主要内容 知识点3,线索二叉树,线索二叉树的提出:1、遍历的实质:非线性结构线性化(前驱、后继);2、前驱和后继是在遍历中得到的;3、知道前驱和后继,再遍历时就不需要栈;4、可以在二叉链表结构中增加前驱和后继两个指针域;5、n个结点的二叉树有n1个空指针,可以利用。,4,线索二叉树 线索二叉树的提出:4,线索二叉树,n个结点的二叉链表中含有n+1个空指针域,可以利用这些空指针域来存放结点的前驱和后继的信息,这样的指针称为“线索”,加上了线索的二叉链
3、表称为线索链表,加上线索的二叉树就是线索二叉树(Threaded Binary Tree)。将二叉树变为线索二叉树的过程称为线索化。,ltag=,rtag=,5,线索二叉树 n个结点的二叉链表中含有n+1个,线索二叉树,线索化,只有空指针才能加线索,6,线索二叉树 线索化只有空指针,前序前驱线索化,前序前驱线索化,7,前序前驱线索化前序前驱线索化ABECFGHIDABECFGH,中序(全)线索二叉树,NULL,为方便起见,在线索链表中增加一个头结点,令其lchild域指向二叉树的根结点,rchild域指向访问序列的最后一个结点,这样,就建立了一个双向线索链表。,8,中序(全)线索二叉树NULL
4、ACFEDBNULLA00E11,后序(全)线索化,9,后序(全)线索化9,线索链表的类型定义,typedef struct BiThrNode ElemTyte data;struct BiThrNode*lchild,*rchild;左、右孩子指针 int ltag,rtag;BiThrNode,*BiThrTree 后面将讨论以下三方面的算法:一、线索化二、遍历三、查找前驱和后继,10,线索链表的类型定义typedef struct BiThrN,算法举例6.7 中序线索化,BiThrTree pre=null;/设置前驱void InOrderThreat(BiThrTree T)if
5、(T)InOrderThreat(T-lchild);/左子树中序线索化 if(T-lchild=null)T-ltag=1;T-lchild=pre;/左线索为pre;if(T-rchild=null)T-rtag=1;/置右标记,为右线索作准备 if(pre!=null/右子树中序线索化/结束InOrderThreat,11,算法举例6.7 中序线索化BiThrTree pre=nu,算法举例6.8 前序线索化,BiThrTree pre=null;/设置前驱void PreOrderThreat(BiThrTree T)if(T!=null)if(T-lchild=null)T-ltag
6、=1;T-lchild=pre;/设置左线索 if(T-rchild=null)T-rtag=1;/为建立右链作准备 if(pre!=null/右子树前序线索化,12,算法举例6.8 前序线索化BiThrTree pre=nu,算法举例6.9 后序线索化,BiThrTree pre=null;/设置前驱void PostOrderThreat(BiThrTree T)if(T)PostOrderThreat(T-lchild);/左子树后序线索化 PostOrderThreat(T-rchild);/右子树后序线索化 if(T-lchild=null)T-ltag=1;T-lchild=pre
7、;/左线索为pre;if(T-rchild=null)T-rtag=1;/置右标记,为右线索作准备 if(pre!=null/前驱指针后移/结束PostOrderThreat,13,算法举例6.9 后序线索化BiThrTree pre=nu,线索二叉树的中序非递归遍历,中序线索二叉树的中序非递归遍历带头结点的中序线索二叉树的中序非递归遍历,14,线索二叉树的中序非递归遍历14,算法举例6.10中序线索二叉树的中序遍历,/遍历即找结点的后继的过程,非递归!void InorderTraverseThr(BiThrTree p)while(p)二叉树非空 while(p-ltag=0)找中序序列的
8、开始结点 p=p-lchild;printf(p-data);while(p/右子树的最左孩子是p的后继/while InorderTraverseThr,15,算法举例6.10中序线索二叉树的中序遍历/遍历即找结点的后,算法举例6.11 带头结点的线索二叉树 的中序遍历,/头结点的lchild域指向二叉树的根结点/rchild域指向访问序列的最后一个结点void InorderTraverseThr(BiThrTree thrt)p=thrt-lchild;p指向根结点 while(p!=thrt)二叉树非空 while(p-ltag=0)找中序序列的开始结点 p=p-lchild;prin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线索 二叉 课件
链接地址:https://www.31ppt.com/p-2109511.html