- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构 课 线索二叉树
第五章 树与二叉树;第五章 树与二叉树;线索化二叉树 (Threaded Binary Tree);线索 (Thread);这种设计的缺点是每个结点增加两个指针,当结点数很大时存储消耗较大。
改造树结点,将 pred 指针和 succ 指针压缩到 leftChild 和 rightChild 的空闲指针中,并增设两个标志 ltag 和 rtag,指明指针是指示子女还是前驱/后继。后者称为线索。
ltag (或rtag) = 0,表示相应指针指示左子女(或右子女结点);当ltag (或rtag) = 1, 表示相应指针为前驱(或后继)线索。;leftChild ltag data rtag rightChild ;线索化二叉树的类定义;template class T
class ThreadTree { //线索化二叉树类
protected:
ThreadNodeT *root; //树的根指针
void createInThread (ThreadNodeT *current,
ThreadNodeT * pre);
//中序遍历建立线索二叉树
ThreadNodeT *parent (ThreadNodeT *t);
//寻找结点t的双亲结点
public:
ThreadTree () : root (NULL) { } //构造函数; void createInThread(); //建立中序线索二叉树
ThreadNodeT *First (ThreadNodeT *current);
//寻找中序下第一个结点
ThreadNodeT *Last (ThreadNodeT *current);
//寻找中序下最后一个结点
ThreadNodeT *Next (ThreadNodeT *current);
//寻找结点在中序下的后继结点
ThreadNodeT *Prior (ThreadNodeT *current);
//寻找结点在中序下的前驱结点
………
};;if (current-rtag ==1)
后继为current-rightChild
else //current-rtag == 0
后继为当前结点右子树
的中序下的第一个结点
;寻找当前结点在中序下的前驱;在中序线索化二叉树中部分成员函数的实现;template class T //另一个版本见面课本198
ThreadNodeT * ThreadTree T::
Next (ThreadNodeT * current) {
//函数返回在线索化二叉树中结点*current在中序
//下的后继结点
ThreadNodeT *p = current-rightChild;
if (current-rtag == 0) return First (p);
//rtag == 0, 表示有右子女
else return p;
//rtag == 1, 直接返回后继线索
}; ;template class T
void ThreadTree T ::
Inorder (void (*visit) (BinTreeNodeT *t)) {
//线索化二叉树的中序遍历
ThreadNodeT * p;
for (p = First (); p != NULL; p = Next (p) )
visit (p);
};;0 A 0;0 A 0;0 A 0;0 A 0;0 A 0;0 A 0;0 A 0;通过中序遍历建立中序线索化二叉树;template class T
void ThreadTreeT::
createInThread (ThreadNodeT *current,
ThreadNodeT * pre) {
//通过中序遍历, 对二叉树进行线索化
if (current == NULL) return;
createInThread (current-leftChild, pre);
//递归, 左子树线索化
if (current-leftChild == NULL) { //建立当前结点的前驱线索
current-leftChild = pre; curre
您可能关注的文档
- 排痰机操作技规程.doc
- 抗菌陶瓷的制和性能研究.pdf
- 投资学invstment课件 Chap012.ppt
- 排队理论模型件.ppt
- 排队论在学校堂窗口服务中的应用.doc
- 接入网技术作.doc
- 排队论(Ligo方法).ppt
- 接口、委托和件.ppt
- 接触网平面布图英文释义.doc
- 控制原理专业汇.doc
- 基于大数据的互联网医疗美容行业用户画像研究报告[001].docx
- 2025年保险数字化理赔服务跨行业合作模式研究报告.docx
- 针对2025年化工园区安全环保提升项目的社会稳定风险评估与监测预警报告.docx
- 2025年工业互联网平台量子通信技术应用与发展趋势分析报告.docx
- 2023年广东省佛山市三水区白坭镇招聘社区工作者真题参考答案详解.docx
- 绿色金融助力新能源汽车产业链可持续发展路径探析.docx
- 共享出行平台信用体系构建,2025年信用保险市场拓展报告.docx
- 2025年文化遗产数字化保护与利用中的文化遗产数字化保护与数字展览设计报告.docx
- 脑机接口技术知识产权运营与管理实战报告.docx
- 2025年社区体育公园跨境智慧运动数据共享平台建设策略分析报告.docx
文档评论(0)