阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。【说明】一棵非空二叉树中“最左下”结点定义为:若树根的左子树为空,则树根为“最左下”结点;否则,从树根的左子树根出发,沿结点的左子树分支向下查找,直到某个结点不存在左子树时为止,该结点即为此二叉树的“最左下”结点。例如,下图所示的以 A为根的二叉树的“最左下”结点为D,以C为根的子二叉树中的“最左下”结点为C。二叉树的结点类型定义如下:typedef stmct BSTNode{int data;struct BSTNode*lch,*

题目

阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

一棵非空二叉树中“最左下”结点定义为:若树根的左子树为空,则树根为“最左下”结点;否则,从树根的左子树根出发,沿结点的左

子树分支向下查找,直到某个结点不存在左子树时为止,该结点即为此二叉树的“最左下”结点。例如,下图所示的以 A为根的二叉树的“最

左下”结点为D,以C为根的子二叉树中的“最左下”结点为C。

二叉树的结点类型定义如下:

typedef stmct BSTNode{

int data;

struct BSTNode*lch,*rch;//结点的左、右子树指针

}*BSTree;

函数BSTree Find Del(BSTree root)的功能是:若root指向一棵二叉树的根结点,则找出该结点的右子树上的“最左下”结点*p,并从

树于删除以*p为根的子树,函数返回被删除子树的根结点指针;若该树根的右子树上不存在“最左下”结点,则返回空指针。

【函数】

BSTrce Find_Del(BSTreeroot)

{ BSTreep,pre;

if ( !root ) return NULL; /*root指向的二叉树为空树*/

(1); /*令p指向根结点的右子树*/

if ( !p ) return NULL;

(2); /*设置pre的初值*/

while(p->lch){ /*查找“最左下”结点*/

pre=p;p=(3);

}

if ((4)==root) /*root的右子树根为“最左下”结点*/

pre->rch=NULL;

else

(5)=NULL; /*删除以“最左下”结点为根的子树*/

reurn p;

}


相似考题
更多“ 阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。【说明】一棵非空二叉树中“最左下”结点定义为:若树根的左子树为空,则树根为“最左下”结点;否则,从树根的左子树根出发,沿结点的左子树分支向下查”相关问题
  • 第1题:

    阅读以下说明、C函数和问题,将解答填入答题纸的对应栏内。

    【说明】

    二叉查找树又称为二叉排序树,它或者是一棵空树,或者是具有如下性质的二叉树:

    ●若它的左子树非空,则其左子树上所有结点的键值均小于根结点的键值;

    ●若它的右子树非空,则其右子树上所有结点的键值均大于根结点的键值;

    ●左、右子树本身就是二叉查找树。

    设二叉查找树采用二叉链表存储结构,链表结点类型定义如下:

    typedefstructBiTnode{

    intkey_value;/*结点的键值,为非负整数*/

    structBiTnode*left,*right;/*结点的左、右子树指针*/

    }*BSTree;

    函数find_key(root,key)的功能是用递归方式在给定的二叉查找树(root指向根结点)中查找键值为key的结点并返回结点的指针;若找不到,则返回空指针。

    【函数】

    BSTreefind_key(BSTreeroot,intkey)

    {

    if((1))

    returnNULL;

    else

    if(key==root->key_value)

    return(2);

    elseif(keykey_value)

    return(3);

    else

    return(4);

    }

    【问题1】

    请将函数find_key中应填入(1)~(4)处的字句写在答题纸的对应栏内。

    【问题2】

    若某二叉查找树中有n个结点,则查找一个给定关键字时,需要比较的结点个数取决于(5).


    答案:


    (1)!root,或root=0,或root==NULL


    (2)root


    (3)find_key(root→left,key)


    (4)find_key(root→right,key)


    (5)该关键字对应结点在该二叉查找树所在层次(数)或位置,或者该二叉树中从根结点到该关键字对应结点的路径长度


    解析:


    本题考查数据结构的应用、指针和递归程序设计。


    根据二叉查找树的定义,在一棵二叉查找树上进行查找时,首先用给定的关键字与树根结点的关键字比较,若相等,则查找成功;若给定的关键字小于树根结点的关键字,则接下来到左子树上进行查找,否则接下来到右子树上进行查找。如果在给定的二叉查找树上不存在与给定关键字相同的结点,则必然进入某结点的空的子树时结束查找。因此,空(1)处填入"!root"表明进入了空树;空(2)处填入"root"表明返回结点的指针;空(3)处填入"find_key(root→left,key)"表明下一步到左子树上继续查找;空(4)处填入"find_key(root→right,key)"表明下一步到右子树上继续查找。


    显然,在二叉排序树上进行查找时,若成功,则查找过程是走了一条从根结点到达所找结点的路径。例如,在下图所示的二叉排序树中查找62,则依次与46、54、101和62作了比较。因此,在树中查找一个关键字时,需要比较的结点个数取决于该关键字对应结点在该二叉查找树所在层次(数)或位置。

  • 第2题:

    对二叉树进行后序遍历和中序遍历时,都依照左子树在前右子树在后的顺序。已知对某二叉树进行后序遍历时,结点M是最后被访问的结点,而对其进行中序遍历时,M是第一个被访问的结点,那么该二叉树的树根结点为M,且( )。

    A.其左子树和右子树都必定为空
    B.其左子树和右子树都不为空
    C.其左子树必定为空
    D.其右子树必定为空

    答案:C
    解析:
    前序遍历:先遍历根结点,然后遍历左子树,最后遍历右子树。中序遍历:先遍历左子树,然后遍历根结点,最后遍历右子树。后序遍历:先遍历左子树,然后遍历右子树,最后遍历根节点。结点M是树根结点,而在中序遍历的时候,M是第一个被访问的结点,那么可以看出其左子树应该为空。

  • 第3题:

    一棵有n个结点的树,在把它转换成对应的二叉树后,该二叉树根结点的左子树上共有()个结点。

    A.n-2

    B.n-1

    C.n+1

    D.n+2


    n-1

  • 第4题:

    若一棵二叉中只有叶结点和左、右子树皆非空的结点,设叶结点的个数为k,则左、右子树皆非空的结点个数是【 】。


    正确答案:k-1
    根据题意可知该二叉树只有度为2的结点(左、右子树皆非空的结点)和度为0的结点,设度为2的结点数为n2,则由树的性质(3)可得n2=k-1。

  • 第5题:

    一棵有 n 个结点的树转换成对应的二叉树后,该二叉树根结点的左子树上共有()个结点。

    A.n-2

    B.n-1

    C.[n/2]

    D.无法确定


    A