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

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


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

    阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。

    [说明]

    二叉树的二叉链表存储结构描述如下:

    lypedef struct BiTNode

    { datatype data;

    street BiTNode *lchiht, *rchild; /*左右孩子指针*/ } BiTNode, *BiTree;

    下列函数基于上述存储结构,实现了二叉树的几项基本操作:

    (1) BiTree Creale(elemtype x, BiTree lbt, BiTree rbt):建立并返回生成一棵以x为根结点的数据域值,以lbt和rbt为左右子树的二叉树;

    (2) BiTree InsertL(BiTree bt, elemtype x, BiTree parent):在二叉树bt中结点parent的左子树插入结点数据元素x;

    (3) BiTree DeleteL(BiTree bt, BiTree parent):在二叉树bt中删除结点parent的左子树,删除成功时返回根结点指针,否则返回空指针;

    (4) frceAll(BiTree p):释放二叉树全体结点空间。

    [函数]

    BiTree Create(elemtype x, BiTree lbt, BiTree rbt) { BiTree p;

    if ((p = (BiTNode *)malloc(sizeof(BiTNode)))= =NULL) return NULL;

    p->data=x;

    p->lchild=lbt;

    p->rchild=rbt;

    (1);

    }

    BiTree InsertL(BiTree bt, elemtype x,BiTree parent)

    { BiTree p;

    if (parent= =NULL) return NULL;

    if ((p=(BiTNode *)malloc(sizeof(BiTNode)))= =NULL) return NULL;

    p->data=x;

    p->lchild= (2);

    p->rchild= (2);

    if(parent->lchild= =NULL) (3);

    else{

    p->lchild=(4);

    parent->lchild=p;

    }

    return bt;

    }

    BiTree DeleteL(BiTree bt, BiTree parent)

    { BiTree p;

    if (parent= =NULL||parent->lchild= =NULL) return NULL;

    p= parent->lchild;

    parent->lchild=NULL;

    freeAll((5));

    return bt;


    正确答案:(1) return p (2) NULL (3) parent->lchild=p (4) parent->lchild (5) p
    (1) return p (2) NULL (3) parent->lchild=p (4) parent->lchild (5) p 解析:(1)此处应返回新建的二叉树;(2)新元素结点初始化时,数据域取值x,左右孩子指针指向NULL;
    (3)若parent结点的左孩子结点空,则直接令其左孩子指针指向p;
    (4)若parent结点的左孩子结点不空,则让新结点p充当其左子树的根;
    (5)此处需释放二叉树p(parent的左子树)所占用的空间。

  • 第2题:

    43、设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点 , 若将结点y插入结点x之后,则需要执行以下语句: 。


    q->next=p->next,p->next=q

  • 第3题:

    试编写在带头结点的单链表中删除最小值结点的算法,假设结点的指针域为next,数据域为data。 void Delete(LinkList *L){}


    /删除最小值结点 public void delMin() { Node<T> p=head,q=head.next,p1=null,q1=null; if(!isEmpty()){ T min=q.data; while(q!=null){ //从第一个位置的值开始比较到最后一个位置,定位最小值位置 if(((Comparable)min).compareTo(q.data)>0){ min=q.data; p1=p; //最小值的前一个位置 q1=q; //最小值的位置 } p=q; q=q.next; } p1.next=q1.next; //删除q1最小值位置 } length--; }

  • 第4题:

    1、设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点 , 若将结点y插入结点x之后,则需要执行以下语句:_______; ______;


    p->next=p->next->next;

  • 第5题:

    已知二叉树以二叉链表结构存储,根指针为root,结构类型定义如下。请编写递归算法统计叶子结点个数。 typedef struct node { char data; struct node *lchild,*rchild; }BiNode,*BiTree;


    错误