线索二叉树算法讲解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ABD###CE### AB#D##C#E##
ABD###CE###
0
A
0
0
B
1
1
0
C
1
1
1
D
1
E
AB#D##C#E##
0
A
0
1
B
0
1
C
0
1
D
1
1
E
1
2、创建线索二叉树

更新结点
void CreateThread(BiThrTree &root) { stack <BiThrTree> s; BiThrTree pre = NULL, curr = root; while(curr!=NULL || !s.empty()) {//未到最后一个结点 while(curr->lChild!=NULL)//一直往左走 ______________________ ____________________//修改最左结点lLink和lChild while(curr->rChild==NULL&&!s.empty()) ______________________//出栈修改rLink和rChild pre = curr; curr = curr->rChild; } ____________________//修改最后一个结点的rLink和rChild }
百度文库 扩充:逆序遍历线索二叉树?
计算机理论研究重要期刊

Communication of the ACM


计算机理论研究的 Nature/Science,高水平、前瞻 性及通俗化的学术论文与综述 http://cacm.acm.org/
Alan J. Perlis

艾伦·佩利
A founding father of Computer Science as a separate discipline. The first recipient awarded the Turing Award in 1966 for his influence in the area of advanced programming techniques and compiler construction.
线索二叉树算法讲解
计算机科学系
胡少军 博士
2013年5月30日
线索二叉树(threaded binary tree)


利用二叉链表中的空链域存放结点的前驱和后 继信息。 由A. J. Perlis和Charles Thornton提出。
A. J. Perlis and Charles Thornton. Symbol manipulation by threaded lists. Communications of the ACM, 1960. 3(4):195-204.
1、线索二叉树存储结构
#define CHILD 0 #define THREAD 1 typedef struct _BiThrNode { char data; struct _BiThrNode *lChild, *rChild;
unsigned char lLink, rLink;
} BiThrNode, *BiThrTree;
3、中序遍历线索二叉树
void InorderTraverseThreadedTree(BiThrTree &root) { BiThrTree p = root; while(p!=NULL) {//未遍历到最后一个结点 while(p->lLink!=THREAD)//一直往左走 ____________________ _________________//输出当前结点信息 while(p->rLink==THREAD&&p->rChild!=NULL) ____________________//若不存在右孩子 p = p->rChild; } }
为何使用线索二叉树?



避免递归调用或使用堆栈 便于查找结点的前驱与后继 时空效率高
线索二叉树实现——以中序为例
线索二叉树实现——以中序为例
1、确定存储结构 2、创建线索二叉树 2.1 创建二叉树并初始化 2.2 更新结点中的lLink, rLink, lChild和rChild 3、中序遍历线索二叉树
艾伦·佩利由于在ALGOL语言的定义和扩充上所作 出的重大贡献,以及使计算机科学成为一门独立 的学科上所发挥的巨大作用而成为首届图灵奖获 得者。

Communications of ACM由他倡议创办, 并在1958—1962年担任第一任主编。
为何使用线索二叉树?
Ben Pfaff. Performance analysis of BSTs in system software. ACM SIGMETRICS Performance Evaluation Review, vol. 32, no. 1, 2004, Pages: 410411 , DOI: 10.1145/1012888.1005742
2、创建线索二叉树

先序创建二叉树并初始化
void CreateThrBiTree(BiThrTree &root) { scanf("%c", &ch); if(ch=='#') ____________________//空子树 else //递归建立二叉树 ____________________//初始化lLink, rLink }
相关文档
最新文档