问题 问答题

【函数】
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

解析:

[分析]:
根据题目中的说明,函数BSTree Find Del (BSTree root)的功能是:若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"。

问答题 简答题
单项选择题