对于二叉排序树的查找,若根结点元素的键值大于被查找元素的键值,则应该在二叉树的___上继续查找()A、左子树B、右子树C、左右两棵子树D、根接点

题目
对于二叉排序树的查找,若根结点元素的键值大于被查找元素的键值,则应该在二叉树的___上继续查找()

A、左子树

B、右子树

C、左右两棵子树

D、根接点


相似考题
更多“对于二叉排序树的查找,若根结点元素的键值大于被查找元素的键值,则应该在二叉树的___上继续查找() A、左子树B、右子树C、左右两棵子树D、根接点”相关问题
  • 第1题:

    对于二叉查找树(Binary Search Tree),若其左子树非空,则左子树上所有结点的值均小于根结点的值;若其右子树非空,则右子树上所有结点的值均大于根结点的值。左、右子树本身就是两棵二叉查找树。因此,对任意一棵二叉查找树进行(61)遍历可以得到一个结点元素的递增序列。在具有n个结点的二叉查找树上进行查找运算,最坏情况下的算法复杂度为(62)。

    A.先序

    B.中序

    C.后序

    D.层序


    正确答案:B

  • 第2题:

    树形查找

    二叉排序树:每个结点的值都大于其左子树任一结点的值而小于其右子树任一结点的值。

    查找

    function treesrh(k:keytype):pointer;

    var q:pointer;


    正确答案:

     

    begin
    q:=root;
    while (q<>nil) and (q^.key<>k) do
    if k<q^.key then q:=q^.left
    else q:=q^.right;
    treesrh:=q;
    end;

  • 第3题:

    阅读下列说明和流程图,将应填入(n)的语句写在对应栏内。

    【流程图说明】

    下面的流程(如图1所示)用N-S盒图形式描述了在一棵二叉树排序中查找元素的过程,节点有3个成员:data, left和right。其查找的方法是:首先与树的根节点的元素值进行比较:若相等则找到,返回此结点的地址;若要查找的元素小于根节点的元素值,则指针指向此结点的左子树,继续查找;若要查找的元素大于根节点的元素值,则指针指向此结点的右子树,继续查找。直到指针为空,表示此树中不存在所要查找的元素。

    【算法说明】

    【流程图】

    将上题的排序二叉树中查找元素的过程用递归的方法实现。其中NODE是自定义类型:

    typedef struct node {

    int data;

    struct node * left;

    struct node * right;

    }NODE;

    【算法】

    NODE * SearchSortTree(NODE * tree, int e)

    {

    if(tree!=NULL)

    {

    if(tree->data<e)

    (4); //小于查找左子树

    else if(tree->data<e)

    (5); //大于查找左子树

    else return tree;

    }

    return tree;

    }


    正确答案:(1)p=p->left (2)ptr=p->right (3)return P (4) return SearchSortTree(tree->left ) (5)return SearchSortTree(tree->right)
    (1)p=p->left (2)ptr=p->right (3)return P (4) return SearchSortTree(tree->left ) (5)return SearchSortTree(tree->right) 解析:所谓二叉排序树,指的是一棵为空的二叉树,或者是一棵具有如下特性的非空二叉树:
    ①若它的左子树非空,则左子树上所有结点的值均小于根结点的值。②若它的右子树非空,则右子树上所有结点的值均大干根结点的值。③左、右子树本身又各是一棵二叉排序树。
    先来分析流程图。在流程图中只使用一个变量p,并作为循环变量来控制循环,所以循环体中必须修改这个值。当进入循环时,首先判断p是不是为空和该结点是不是要找的结点,如果这两个条件有一个满足就退出循环,返回prt,(如果是空,则返回NULL,说明查询失败;否则返回键值所在结点的指针。)因此(3)空处应当填写“return p”。如果两个条件都不满足,就用查找键值e与当前结点的关键字进行比较,小的话,将指针p指向左子树继续查找,大的话将指针P指向右子树继续查找。于是,(1)空处应当填写“p=p->left”,(2)空处应当填写“p=p->right”。
    再来分析程序。虽然是递归算法,但实现思路和非递归是一样。首先用查找键值e与树根结点的关键字比较,如果值小的话,就在左子树中查找(即返回在左子树中查找结果);如果值大的话在右子树中查找(即返回在右子树中查找结果);如果相等的活就返回树根指针。因此(4)、(5)空分别应填写“return SearehSortTree(tree->left)”和“return SearehSoaTree(tree->right)”。

  • 第4题:

    ●试题一

    阅读下列说明和流程图,将应填入(n)的语句写在答题纸的对应栏内。

    【流程图说明】

    下面的流程(如图1所示)用N-S盒图形式描述了在一棵二叉树排序中查找元素的过程,节点有3个成员:data,left和right。其查找的方法是:首先与树的根节点的元素值进行比较:若相等则找到,返回此结点的地址;若要查找的元素小于根节点的元素值,则指针指向此结点的左子树,继续查找;若要查找的元素大于根节点的元素值,则指针指向此结点的右子树,继续查找。直到指针为空,表示此树中不存在所要查找的元素。

    【算法说明】

    【流程图】

    将上题的排序二叉树中查找元素的过程用递归的方法实现。其中NODE是自定义类型:

    typedef struct node{

    int data;

    struct node*left;

    struct node*right;

    }NODE;

    【算法】

    NODE*SearchSortTree(NODE*tree,int e)

    {

    if(tree!=NULL)

    {

    if(tree->data<e)

    (4) ;∥小于查找左子树

    else if(tree->data<e)

    (5) ;∥大于查找左子树

    else return tree;

    }

    return tree;

    }


    正确答案:
    ●试题一【答案】(1)p=p->left(2)ptr=p->right(3)returnP(4)returnSearchSortTree(tree->left)(5)returnSearchSortTree(tree->right)【解析】所谓二叉排序树,指的是一棵为空的二叉树,或者是一棵具有如下特性的非空二叉树:①若它的左子树非空,则左子树上所有结点的值均小于根结点的值。②若它的右子树非空,则右子树上所有结点的值均大于根结点的值。③左、右子树本身又各是一棵二叉排序树。先来分析流程图。在流程图中只使用一个变量p,并作为循环变量来控制循环,所以循环体中必须修改这个值。当进入循环时,首先判断p是不是为空和该结点是不是要找的结点,如果这两个条件有一个满足就退出循环,返回prt,(如果是空,则返回NULL,说明查询失败;否则返回键值所在结点的指针。)因此(3)空处应当填写"returnp"。如果两个条件都不满足,就用查找键值e与当前结点的关键字进行比较,小的话,将指针p指向左子树继续查找,大的话将指针p指向右子树继续查找。于是,(1)空处应当填写"p=p->left",(2)空处应当填写"p=p->right"。再来分析程序。虽然是递归算法,但实现思路和非递归是一样。首先用查找键值e与树根结点的关键字比较,如果值小的话,就在左子树中查找(即返回在左子树中查找结果);如果值大的话在右子树中查找(即返回在右子树中查找结果);如果相等的话就返回树根指针。因此(4)、(5)空分别应填写"returnSearchSortTree(tree->left)"和"returnSearchSortTree(tree->right)"。

  • 第5题:

    一棵二叉树满足下列条件:对任一结点,若存在左、右子树,则其值都小于它的左子树上所有结点的值,而大于右子树上所有结点的值。现采用【 】遍历方式就可以得到这棵二叉树所有结点的递增序列。

    A.先根

    B.中根

    C.后根

    D.层次


    正确答案:B

  • 第6题:

    阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】二叉查找树又称为二叉排序树,它或者是一棵空树,或者是具有如下性质的二叉树。(1)若它的左子树非空,则左子树上所有结点的值均小于根结点的值。(2)若它的右子树非空,则右子树上所有结点的值均大于根结点的值。(3)左、右子树本身就是两棵二叉查找树。二叉查找树是通过依次输入数据元素并把它们插入到二叉树的适当位置上构造起来的,具体的过程是:每读入一个元素,建立一个新结点,若二叉查找树非空,则将新结点的值与根结点的值相比较,如果小于根结点的值,则插入到左子树中,否则插入到右子树中;若二叉查找树为空,则新结点作为二叉查找树的根结点。根据关键码序列{46,25,54,13,29,91}构造一个二叉查找树的过程如图4-1所示。

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

    typedef int KeyType;typedef struct BSTNode{KeyType key;struct BSTNode *left,*right;}BSTNode,*BSTree;

    图4-1(g)所示二叉查找树的二叉链表表示如图4-2所示。

    函数int InsertBST(BSTree *rootptr,KeyType kword)功能是将关键码kword插入到由rootptr指示出根结点的二叉查找树中,若插入成功,函数返回1,否则返回0。【C代码】

    int lnsertBST(BSTree*rootptr,KeyType kword)/*在二叉查找树中插入一个键值为kword的结点,若插入成功返回1,否则返回0;*rootptr为二叉查找树根结点的指针*/{BSTree p,father;(1) /*将father初始化为空指针*/p=*rootptr; /*p指示二叉查找树的根节点*/while(p&&(2)){ /*在二叉查找树中查找键值kword的结点*/father=p;if(kword<p->key)p=p->left;elsep=p->right;}if((3))return 0; /*二叉查找树中已包含键值kword,插入失败*/ p=(BSTree)malloc((4)); /*创建新结点用来保存键值kword*/If(!p)return 0; /*创建新结点失败*/p->key=kword;p->left=NULL;p->right=NULL; If(!father)(5) =p; /*二叉查找树为空树时新结点作为树根插入*/elseif(kword<father->key)(6);/*作为左孩子结点插入*/else(7);/*作右孩子结点插入*/return 1;}/*InsertBST*/


    答案:
    解析:
    father=(void*)0keyword!=p-keypsizeof(BSTNode)*rootptrfather-left=pfather-right=p

  • 第7题:

    查找效率最高的二叉排序树是()。

    A.所有结点的左子树都为空的二叉排序树
    B.所有结点的右子树都为空的二叉排序树
    C.平衡二叉排序树
    D.没有左子树的二叉排序树

    答案:C
    解析:
    对于结点个数相同的二叉排序树,平衡二叉排序树的深度最小。而二叉排序树的查找效率取决于二叉排序树的深度。

  • 第8题:

    数据结构中,二叉排序树的()上结点的值都大于根结点的值。

    • A、左子树
    • B、右子树
    • C、左子树和右子树
    • D、都不对

    正确答案:B

  • 第9题:

    先序遍历一颗二叉排序树的顺序是()。

    • A、左子树根结点右子树
    • B、根结点左子树右子树
    • C、左子树右子树根结点
    • D、都不对

    正确答案:B

  • 第10题:

    查找效率最高的二叉排序树是()。

    • A、所有结点的左子树都为空的二叉排序树。
    • B、所有结点的右子树都为空的二叉排序树。
    • C、平衡二叉树。
    • D、没有左子树的二叉排序树。

    正确答案:C

  • 第11题:

    单选题
    二叉排序树的()上结点的值都小于根结点的值。
    A

    左子树

    B

    右子树

    C

    左子树和右子树

    D

    都不对


    正确答案: B
    解析: 暂无解析

  • 第12题:

    单选题
    查找效率最高的二叉排序树是()。
    A

    所有结点的左子树都为空的二叉排序树。

    B

    所有结点的右子树都为空的二叉排序树。

    C

    平衡二叉树。

    D

    没有左子树的二叉排序树。


    正确答案: A
    解析: 暂无解析

  • 第13题:

    阅读以下说明和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;

    }


    正确答案:(1)p=root->rch (2)pre=root (3)p->lch (4)pre (5)pre->lch
    (1)p=root->rch (2)pre=root (3)p->lch (4)pre (5)pre->lch 解析:根据题目中的说明,函数BSTree FindDel (BSTreeroot)的功能是:若root指向一棵二叉树的根结点,则找出该结点的右子树上的“最

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

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

    左子树分支向下查找,直到某个结点不存在左子树时为止,该结点即为此二叉树的“最左下”结点。
    因此,给定一棵非空二叉树后,其右子树上的“最左下”结点要么为右子树根结点自己,要么为右子树根的左子树结点。
    当二叉树非空时,root指向的结点是存在的,因此,令p指向根结点的右子树表示为“p=root->rch"。在二叉树上删除结点的操作实质上

    是重置其父结点的某个子树指针,因此查找被删除结点时,需要保存被删结点的父结点指针,pre起的就是这个作用。空 (2)处应填入

    “p=root",使得指针pre与p指向的结点始终保持父子关系。根据“最左下”结点的定义,空(3)处应填入“p->lch"。
    当root的右子树根为“最左下”结点时,pre指针的指向就不会被修改,因此,空 (4)处应填入“pre”。若“最左下”结点在root的右子

    树的左子树上,则删除以p指向的“最左下”结点为根的子树就是将pre(*p的父结点)的左子树指针置空,因此,空 (5)填入“pre->Ich"。

  • 第14题:

    阅读以下说明、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作了比较。因此,在树中查找一个关键字时,需要比较的结点个数取决于该关键字对应结点在该二叉查找树所在层次(数)或位置。

  • 第15题:

    阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 二叉查找树又称为二叉排序树,它或者是一棵空树,或者是具有如下性质的二叉树。 (1)若它的左子树非空,则左子树上所有结点的值均小于根结点的值。 (2)若它的右子树非空,则右子树上所有结点的值均大于根结点的值。 (3)左、右子树本身就是两棵二叉查找树。 二叉查找树是通过依次输入数据元素并把它们插入到二叉树的适当位置上构造起来的,具体的过程是:每读入一个元素,建立一个新结点,若二叉查找树非空,则将新结点的值与根结点的值相比较,如果小于根结点的值,则插入到左子树中,否则插入到右子树中;若二叉查找树为空,则新结点作为二叉查找树的根结点。 根据关键码序列{46,25,54,13,29,91}构造一个二叉查找树的过程如图4-1所示。设二叉查找树采用二叉链表存储,结点类型定义如下: typedef int KeyType; typedef struct BSTNode{ KeyType key; struct BSTNode *left,*right; }BSTNode,*BSTree; 图4-1(g)所示二叉查找树的二叉链表表示如图4-2所示。图4-2 函数int InsertBST(BSTree *rootptr,KeyType kword)功能是将关键码kword插入到由rootptr指示出根结点的二叉查找树中,若插入成功,函数返回1,否则返回0。

    【C代码】 int lnsertBST(BSTree*rootptr,KeyType kword) /*在二叉查找树中插入一个键值为kword的结点,若插入成功返回1,否则返回0; *rootptr为二叉查找树根结点的指针 */ { BSTree p,father; (1) ; /*将father初始化为空指针*/ p=*rootptr; /*p指示二叉查找树的根节点*/ while(p&& (2) ){ /*在二叉查找树中查找键值kword的结点*/ father=p; if(kword<p->key) p=p->left; else p=p->right; } if( (3) )return 0; /*二叉查找树中已包含键值kword,插入失败*/ p=(BSTree)malloc( (4) ); /*创建新结点用来保存键值kword*/ If(!p)return 0; /*创建新结点失败*/ p->key=kword; p->left=NULL; p->right=NULL; If(!father) (5) =p; /*二叉查找树为空树时新结点作为树根插入*/ else if(kword<father->key) (6) ; /*作为左孩子结点插入*/ else (7) ; /*作右孩子结点插入*/ return 1; }/*InsertBST*/


    正确答案:father=(void*)0 
    keyword!=p->key
    p
    sizeof(BSTNode)
    *rootptr
    father->left=p
    father->right=p 

  • 第16题:

    二叉树是结点的有限集合,这个有限集合或者为【 】,或者由一个根结点及两棵不相交的、分别称作根的左子树和右子树的二叉树组成。


    正确答案:空集
    空集

  • 第17题:

    试题三(共15分)

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

    【说明】

    函数Insert _key (*root,key)的功能是将键值key插入到*root指向根结点的二叉查找树中(二叉查找树为空时*root为空指针)。若给定的二叉查找树中已经包含键值为key的结点,则不进行插入操作并返回0;否则申请新结点、存入key的值并将新结点加入树中,返回l。

    提示:

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

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

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

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

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

    typedef struct BiTnode{

    int key _value; /*结点的键值,为非负整数*/

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

    }BiTnode, *BSTree;

    【C函数】

    int Insert _key( BSTree *root,int key)

    {

    BiTnode *father= NULL,*p=*root, *s;

    while( (1)&&key!=p->key_value){/*查找键值为key的结点*/

    father=p;

    if(key< p->key_value)p= (2) ; /*进入左子树*/

    else p= (3) ; /木进入右子树*/

    }

    if (p) return 0; /*二叉查找树中已存在键值为key的结点,无需再插入*/

    s= (BiTnode *)malloc( (4) );/*根据结点类型生成新结点*/

    if (!s) return -1;

    s->key_value= key; s->left= NULL; s->right= NULL;

    if( !father)

    (5) ; /*新结点作为二叉查找树的根结点*/

    else /*新结点插入二叉查找树的适当位置*/

    if( key< father->key_value)father->left = s;

    elsefather->right = s;

    retum 1:

    }


    正确答案:
    (1)p   
    (2)p->left   
    (3) p->right  
    (4) sizeof(BiTnode)   
    (5)  *root=s

  • 第18题:

    某二叉排序树如下所示,新的元素45应作为( )插入该二叉树中。

    A.11的左子树
    B.17的右子树
    C.61的左子树
    D.27的右子树

    答案:C
    解析:
    本题考查数据结构基础知识。
    根据二叉排序树的定义,当新来的元素大于根结点的关键码时,应将其插入根结点的右子树中,当新来的元素小于根结点的关键码时,应将其插入根结点的左子树中,在子树上同样如此。由于45大于23,因此将其插入结点31的右子树中,又由于45大于31、小于91、小于61,因此最后将其作为61的左子树加入该二叉树中。

  • 第19题:

    二叉树的中序遍历序列是E、B、A、C、F、D,若A是根结点,则E结点不可能在()。

    • A、左子树
    • B、右子树
    • C、右子树的第二层
    • D、右子树的根节点

    正确答案:B,C,D

  • 第20题:

    关于二叉排序树描述有误的是()。

    • A、二叉排序的右子树上结点的关键字小于左子树上的结点的关键字
    • B、二叉排序的左子树上结点的关键字小于右子树上的结点的关键字
    • C、二叉排序的根节点的关键大于右子树上结点的关键字
    • D、二叉排序的根节点的关键大于左子树上结点的关键字

    正确答案:A,C

  • 第21题:

    二叉排序树的()上结点的值都小于根结点的值。

    • A、左子树
    • B、右子树
    • C、左子树和右子树
    • D、都不对

    正确答案:A

  • 第22题:

    单选题
    数据结构中,二叉排序树的()上结点的值都大于根结点的值。
    A

    左子树

    B

    右子树

    C

    左子树和右子树

    D

    都不对


    正确答案: D
    解析: 暂无解析

  • 第23题:

    多选题
    二叉树的中序遍历序列是E、B、A、C、F、D,若A是根结点,则E结点不可能在()。
    A

    左子树

    B

    右子树

    C

    右子树的第二层

    D

    右子树的根节点


    正确答案: A,D
    解析: 暂无解析