在线索二叉树找前驱和后继

5.3.2 在线索二叉树找前驱和后继

1782456318604

1782977592132

1782978351066

//找到以p为根的子树中,第一个被中序遍历的结点 
ThreadNode *Firstnode(ThreadNode *p){
	//循环找到最左下结点(不一定是叶子结点) 
	while(p->ltag==0) p=p->lchild;
	return p;
}

//在中序先做二叉树中找到结点p的后继结点 
ThreadNode *Nextnode(ThreadNode *p){
	//右子树中最左下结点 
	if(p->rtag==0) return Firstnode(p->rchild);
	else return p->rchild;//
}

//对中序线索二叉树进行中序遍历(利用线索实现的非递归算法) 
void Inorder(ThreadNode *T){
	for(ThreadNode *p=Firstnode(T);p!=NULL;p=Nextnode(p))
	visit(p);
}

1782978439696

1782982238337

// 中序线索二叉树找中序前驱

//找到以P为子树中,最后一个被中序遍历的结点 
ThreadNode *Lastnode(ThreaNode *p){
 	//循环找到最右下结点(不一定是叶子结点) 
 	while(p->rtag==0) p=p->rchild;
 	return p;
}

//在中序线索二叉树中找到结点p的前驱结点 
ThreadNode *Prenode(ThreadNode *p){
	//左子树中最右下结点 
	if(p->ltag==0) return Lastnode(p->lchild);
	else return p->lchild; //ltag==1直接返回前驱线索 
} 


//对中序线索二叉树进行逆向中序遍历 
void RevInorder(ThreadNode *T){
	for(ThreadNode *p=Lastnode(T),p!=NULL;p->Prenode(p))
		visit(p);
}


1782982826057

1782982873025

1782983018033

1782984843822

1782984872855

1782984967601

1782984972754

posted @ 2026-07-02 17:40  轻狂书生han  阅读(3)  评论(0)    收藏  举报