数据结构(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的主要内容,如果未能解决你的问题,请参考以下文章