数据结构(C语言版) 查找 算法设计Demo3

Posted Aiden (winner)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(C语言版) 查找 算法设计Demo3相关的知识,希望对你有一定的参考价值。

已知二叉排序树采用二叉链表存储结构,根结点的指针为T,链结点的结构为(lchild,data,rchild),其中lchild,rchild分别指向该结点左、右孩子的指针,data域存放结点的数据信息。请写出递归算法,从小到大输出二叉排序树中所有数据值>=x的结点的数据。要求先找到第一个满足条件的结点后,再依次输出其他满足条件的结点。

[题目分析]

本题算法之一是如上题一样,中序遍历二叉树,在“访问根结点”处判断结点值是否≥x,如是则输出,并记住第一个≥x值结点的指针。这里给出另一个算法,利用二叉排序树的性质,如果根结点的值>=x,则除左分枝中可能有<x的结点外都应输出。所以从根结点开始查找,找到结点值<x的结点后,将其与双亲断开输出整棵二叉排序树。如果根结点的值<x,则沿右子树查找第一个≥x的结点,找到后,与上面同样处理。

[算法描述]

void  Print(BSTree  t)
       // 中序输出以t为根的二叉排序树的结点
    if(t)
		Print(t->lchild);
        Cout<<t-data;
        Print(t->rchild);
    

void  PrintAllx(BSTree bst,datatype x)
//在二叉排序树bst中,查找值≥x的结点并输出
	p=bst;
	if(p)
		while(p && p->data<x)
			p=p->rchild;//沿右分枝找第一个值≥x的结点
			bst=p; //bst所指结点是值≥x的结点的树的根
			if(p)
				f=p;
				p=p->lchild;//找第一个值<x的结点
				while(p && p->data>=x)//沿左分枝向下,找第一个值<x的结点
					f=p;
					p=p->lchild;
				//f是p的双亲结点的指针,指向第一个值≥x的结点
				if(p)
					f->lchild=null; //双亲与找到的第一个值<x的结点断开
					Print(bst);//输出以bst为根的子树
				//while
			//内层if(p)
	//第一层if(p)//PrintAllx

以上是关于数据结构(C语言版) 查找 算法设计Demo3的主要内容,如果未能解决你的问题,请参考以下文章

数据结构(C语言版) 图 算法设计Demo3

数据结构(C语言版) 排序 算法设计Demo3

数据结构(C语言版) 树和二叉树 算法设计Demo6

数据结构(C语言版) 树和二叉树 算法设计Demo1

数据结构(C语言版) 查找 算法设计Demo5

数据结构(C语言版) 树和二叉树 算法设计Demo4