问答题 假设二叉树T中至多有一个结点的数据域值为x,试设计一个算法拆开以该结点为根的子树,使原二叉树分成两棵二叉树。
【正确答案】本题的算法思想是:先判定T的根结点是否是要找的结点,若是,则直接拆开;否则判定在其左子树中进行拆开。若在左子树中未找到,则在右子树中查找。 实现本题功能的程序代码如下: BTNode *dislink(BTNode * &t,elemtype x) //t:原二叉树,拆开后的第一棵二叉树;分拆成功后返回第二棵二叉树 { BTNode *p,*find; if(t!=NULL) { if(t→data==x) //根结点数据域为x { p=t; t=NULL; return(p); } else { find=dislink(t→left,x); //在左子树中查找并分解 if(!find) //若左子树中未找到,则在右子树中查找并分解 find=dislink(t→right,x); return(find); } } else return(NULL); }
【答案解析】