题库 题库

【简答题】

试题三(15分,每空3分)
  阅读以下说明和C语言函数,将应填入___(n)___处的字句写在答题纸的对应栏内。
[说明]
  一棵非空二叉树中"最左下"结点定义为:若树根的左子树为空,则树根为"最左下"结点;否则,从树根的左子树根了发,沿结点的左孩子分支向下查找,直到某个结点不存在左孩子时为止,该结点即为此二叉树的"最左下"结点。例如,下图所示的以A为根的二叉树的"最左下"结点为D,以C为根的子二叉树中的"最左下"结点为C。 
     
  二叉树的结点类型定义如下:
  typedef struct BSTNode{
   int data;
   struct BSTNode *lch ,*rch;  //结点的左、右孩子指针
  }*BSTree;
  函数BSTree Find_Del (BSTree root)的功能是:若root 指向一棵二叉树的根结点,则找出该结点的右子树上的"最左下"结点*p,并从树下删除以*p为根的子树,函树返回被删除子树的根结点指针;若该树根的右子树上不存在"最左下" 结点,则返回空指针。
[函数]
  BSTree Find_Del (BSTree root)
  { BSTree p,pre;
   if (!root)return NULL;   /*root指向的二叉树为空树*/
   ___(1)___;         /*令p指向根结点的右子树*/
   if (!p) return NULL;    /*设置pre的初值*/
   ___(2)___;         /*查到"最左下"结点 */
   Pre=p;p=___(3)___;
  }
  if (___(4)___ == root)     /*root的右子树根为"最左下"结点*/
   pre -> rch = NULL;
  else
   ___(5)___ = NULL;      /*删除以"最左下"结点为根的子树*/
  return p;
  }

参考答案

(1) p = root->rch
(2) pre = root
(3) p->lch
(4) pre
(5) pre->lch

相关试题