[说明] 二叉树的二叉链表存储结构描述如下:lypedef struct BiTNode{ datatype data; street BiTNode *lchiht, *rchild; /*左右孩子指针*/ } BiTNode, *BiTree; 下列函数基于上述存储结构,实现了二叉树的几项基本操作: (1) BiTree Creale(elemtype x, BiTree lbt, BiTree rbt):建立并返回生成一棵以x为根结点的数据域值,以lbt和rbt为左右子树的二叉树; (2) BiTree InsertL(BiTree bt, elemtype x, BiTree parent):在二叉树bt中结点parent的左子树插入结点数据元素x; (3) BiTree DeleteL(BiTree bt, BiTree parent):在二叉树bt中删除结点parent的左子树,删除成功时返回根结点指针,否则返回空指针; (4) frceAll(BiTree p):释放二叉树全体结点空间。[函数]BiTree Create(elemtype x, BiTree lbt, BiTree rbt) { BiTree p; if ((p = (BiTNode *)malloc(sizeof(BiTNode)))= =NULL) return NULL; p->data=x; p->lchild=lbt; p->rchild=rbt; (1) ;}BiTree InsertL(BiTree bt, elemtype x,BiTree parent){ BiTree p; if (parent= =NULL) return NULL; if ((p=(BiTNode *)malloc(sizeof(BiTNode)))= =NULL) return NULL; p->data=x; p->lchild= (2) ; p->rchild= (2) ; if(parent->lchild= =NULL) (3) ; else{p->lchild= (4) ;parent->lchild=p; } return bt;}BiTree DeleteL(BiTree bt, BiTree parent){ BiTree p; if (parent= =NULL||parent->lchild= =NULL) return NULL; p= parent->lchild; parent->lchild=NULL; freeAll( (5) ); return bt;}
参考答案:
解析:(1) return p (2) NULL (3) parent->lchild=p (4) parent->lchild (5) p (1)此处应返回新建的二叉树;(2)新元素结点初始化时,数据域取值x,左右孩子指针指向NULL;(3)若parent结点的左孩子结点空,则直接令其左孩子指针指向p;(4)若parent结点的左孩子结点不空,则让新结点p充当其左子树的根;(5)此处需释放二叉树p(parent的左子树)所占用的空间。