问答题
设T是一棵结点值为整数的二叉排序树,A是一个任意给定的整数。在下面的算法中,free tree(T)在对二叉排序树T进行后序遍历时释放二叉排序树T的所有结点;delete_subtree(T,A),首先在二叉排序树T中查找值为A的结点,根据查找情况分别进行如下处理:(1)若找不到值为A的结点,则返回根结点的地址。(2)若找到值为A的结点,则删除以此结点为根的子树,并释放此子树中的所有结点,若值为A的结点是查找树的根结点,删除后变成空的二又树,则返回null/NIL;否则返回根结点的地址。
typedef struct node{int data, struct node*ichild, *rchild)node;
void free—tree(node*T)
{if(T!=null){free—tree(T一>ichild);free—tree iT一>rchild); (1) ;}
}
node*delete—subtree(node*T,int A)
{node*p=null, *q=T;
while( (2) )
{p=q;if(A
data)q=q一>Ichild;else (3) ;)
if(q!=null)
{free—tree(q);
if(p==null) T=null;else if(Adata) (4) ;else (5) ;
}
return(T):
}
【东华大学2003六(10分)】