前面我们学习的线性数据结构,每个元素都有唯一的前驱(第.ppt

前面我们学习的线性数据结构,每个元素都有唯一的前驱(第.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
§6.5 线索二叉树 特点:空间利用率高,但线索不完全; 举例: a b c d e f g h a 0 0 b 0 0 c 0 0 d 0 0 e 0 0 f 0 0 g 0 0 h 0 0 1 1 1 1 1 1 1 1 1 中序遍历序列:dbegafhc 0 0 1 一、线索方法 §6.5 线索二叉树 二、线索的使用 假设已经建立了某种遍历的线索,那么,在再按同样遍历方式 遍历时,就可以直接使用线索信息得到遍历序列,遍历就是找前驱 或后继,从而提高了效率,若每个结点都记录了前驱、后继线 索,这是很方便的!! 但是,很遗憾,我们的线索方法是记录的不完全线索(为了 节省空间),增加了找前驱、后继的难度,因为有些结点根本没有 记录线索或仅仅记录了一部分! 1、中序线索二叉树,找前趋、后继的方法 前驱: 假设p指向当前结点,找p所指结点的前驱、后继 若p-ltag=1,则p - lchild就是其前驱结点; 若p - ltag=0,则p - lchild指的是左儿子,前驱是谁? 根据中序遍历的规则,前驱在左子树上,而且是中序 遍历左子树的最后一个结点,即左子树的最右下结点。 p if(p - ltag==1) return(p - lson) else { q=p - lson; while(q - rson!=NULL) q=q - rson } rerturn(q) ; §6.5 线索二叉树 二、线索的使用 后继: 若p - rtag=1,则p - rson就是其后继结点; 若p - rtag=0,则p - rson指的是右儿子,后继是谁? 根据中序遍历的规则,后继在右子树上,而且是中序 遍历右子树的第一个结点,即右子树的最左下结点。 p if(p - rtag==1) return(p - rson) else { q=p - rson; while q - lson!=NULL) q=q-lson } rerturn(q) ; §6.5 线索二叉树 二、线索的使用 §6.5 线索二叉树 2、前序线索二叉树,找前趋、后继的方法 前驱: 假设p指向当前结点,找p所指结点的前驱、后继 若p - ltag=1,则p - lson就是其前驱结点; 若p - ltag=0,则p - lson指的是左儿子,前驱是谁? 根据前序遍历的规则,前趋不在左、右子树上,而 是与父亲有关。分几种情况: (1)P是根,则无前驱; P 二、线索的使用 §6.5 线索二叉树 (2)P是父亲的左儿子或是右儿子但无左兄弟, 前驱是父亲; p p 二、线索的使用 §6.5 线索二叉树 (3)P是父亲的右儿子,且有左兄弟,其前驱是前序 遍历父亲左子树上的最后一个结点(是最右下结 点吗?) p p 二、线索的使用 §6.5 线索二叉树 后继: 若p - rtag=1,则p - rson就是其后继结点; 若p - rtag=0,则p - rson指的是右儿子,后继是谁? 根据前序遍历的规则,后继在左、右子树上,如果p 有左子树,则后继是左子树的根,否则是右子树的根; p p 二、线索的使用 §6.5 线索二叉树 3、后序线索二叉树,找前趋、后继的方法 前驱: 假设p指向当前结点,找p所指结点的前驱、后继 若p - ltag=1,则p - lson就是其前驱结点; 若p - ltag=0,则p - lson指的是左儿子,前驱是谁? 根据后序遍历的规则,若p的右子树不空,则前驱 是右子树的根,否则是左子树的根; p p 二、线索的使用 §6.5 线索二叉树 后继: 若p - rtag=1,则p -rson就是其后继结点; 若p - rtag=0,则p - rson指的是右儿子,后继是谁? 根据后序遍历的规则,后继不在左、右子树上,而与 双亲有关。分几种情况: p (1)P是根,则无后继; (2)P是父亲的右儿子或是左儿子但无右兄弟, 后继是父亲; p 二、线索的使用 (3)P是父亲的左儿子,且有右兄弟,其后继驱是 后序遍历右子树上的第一个结点。(是最左 下结点吗?) p §6.5 线索二叉树 二、线索的使用 §6.5 线索二叉树 三、二叉树的线索化 方法: 在进行某种方式遍历的同时,把其中的空指针改为 记线索(左指针空时,指向前驱;右指针空时指向 后继)。 在此,仅介绍中序线索二叉树的算法实现,设为P为当前结点,pre为p的前驱结点,算法描述

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档