问答题 设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(Adata)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分)】
【正确答案】正确答案:(1)delete(T) (2)q&&q一>data!=A (3)q=q一>rchild (4)p一>lchild=null (5)p一>rchild=null
【答案解析】