在线索二叉树中找前驱和后继(C语言)

Posted bfhonor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在线索二叉树中找前驱和后继(C语言)相关的知识,希望对你有一定的参考价值。

一、线索二叉树找前驱和后继

(一)中序线索二叉树

1. 中序线索二叉树找中序后继

//找到以P为根的子树中,第一个被中序遍历的结点
ThreadNode *Firstnode(ThreadNode *p){
	//循环找到最左下结点(不一定是叶结点)
	while(p-> == 0) p=p->lchild;
	return p;
}
//在中序线索二叉树中找到结点p的后继结点
ThreadNode *Nextnode(ThreadNode *p){
	//右子树最左下结点
	if(p->rtag == 0) return Firstnode(p->rchild);
	else return p->rchild;//rtag==1直接返回后继线索
}

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

2. 中序线索二叉树找中序前驱

//找到以P为根的子树中,最后一个被中序遍历的结点
ThreadNode *Lastnode(ThreadNode *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);
}

(二)先序线索二叉树

1. 先序线索二叉树找先序后继

2. 先序线索二叉树找先序前驱


(三)后序线索二叉树

1. 后序线索二叉树找后序前驱

2. 后序线索二叉树找后序后继



以上是关于在线索二叉树中找前驱和后继(C语言)的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的线索化

线索二叉树

二叉树的线索化

线索二叉树

数据结构--线索二叉树

树——线索二叉树