mirror of
https://github.com/CodePanda66/CSPostgraduate-408.git
synced 2023-05-21 21:49:33 +08:00
🚩 add pre/next of ThreadBitree
This commit is contained in:
@@ -18,6 +18,8 @@ typedef struct ThreadNode {
|
||||
int ltag, rtag;//左右线索标志
|
||||
} ThreadNode, *ThreadTree;
|
||||
/**定义模块**/
|
||||
|
||||
/**实现模块**/
|
||||
ThreadNode *pre = NULL;//全局变量用于暂存当前访问结点的前驱
|
||||
|
||||
void visit(ThreadNode *q) {
|
||||
@@ -176,11 +178,52 @@ void CreatPostThread_CSKaoYan(ThreadTree T) {
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
//中序线索二叉树找中序后继
|
||||
//找到以P为根的子树中,第一个被中序遍历的结点
|
||||
ThreadNode *FirstNode(ThreadNode *p){
|
||||
//循环找到最左下结点(不一定是叶结点)
|
||||
while(0==p->ltag){
|
||||
p=p->lchild;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
//在中序线索二叉树中找到结点p的后继结点
|
||||
ThreadNode *NextNode(ThreadNode *p){
|
||||
//在右子树中最左下结点
|
||||
if(0==p->rtag)return FirstNode(p->rchild);
|
||||
else return p->rchild;
|
||||
}
|
||||
|
||||
//对中序线索二叉树进行中序遍历(利用线索实现的非递归算法),空间复杂度为O(1);
|
||||
void InOrder(ThreadNode *T){
|
||||
for (ThreadNode *p = FirstNode(T); p!=NULL ; p=NextNode(p)) {
|
||||
visit(p);
|
||||
}
|
||||
}
|
||||
|
||||
//中序线索二叉树找中序前驱
|
||||
//找到以p为根的子树中,最后一个被中序遍历的结点
|
||||
ThreadNode *LastNode(ThreadNode *p){
|
||||
//循环找到最右下结点(不一定是叶结点)
|
||||
while(0==p->rtag)p=p->rchild;
|
||||
return p;
|
||||
}
|
||||
|
||||
//在中序线索二叉树中找到结点p的前驱结点
|
||||
ThreadNode *PreNode(ThreadNode *p){
|
||||
//左下子树中最右结点
|
||||
if(0==p->ltag)return LastNode(p->lchild);
|
||||
else return p->lchild;
|
||||
}
|
||||
|
||||
//对中序线索二叉树进行逆向中序遍历
|
||||
void RevInOrder(ThreadNode *T){
|
||||
for (ThreadNode *p = LastNode(T); p!=NULL ; p=PreNode(p)) {
|
||||
visit(p);
|
||||
}
|
||||
}
|
||||
|
||||
/**实现模块**/
|
||||
//坐等填坑
|
||||
|
||||
/**实现模块**/
|
||||
|
||||
@@ -188,11 +231,13 @@ void CreatPostThread_CSKaoYan(ThreadTree T) {
|
||||
/**测试模块**/
|
||||
|
||||
void testModule() {
|
||||
printf("开始测试!\n");
|
||||
|
||||
printf("结束测试!\n");
|
||||
}
|
||||
|
||||
/**测试模块**/
|
||||
int main() {
|
||||
|
||||
testModule();
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user