问答题 在二又链表的每个结点中添加一个域int depth,表示以该结点为根的子树的深度(结构编者略)。(1)试编写一递归函数。BiTreeDepth(BiTree T),计算二叉树T中每个结点的depth值,函数的返回值为树T的深度。(2)在(1)的基础上(即已求出二叉树中每个结点的depth值),编写一递归函数BiTreeBalance(BiTree T),判断二叉排序树T是否为平衡二叉树,如果是平衡二叉树,则函数的返回值为真。【北京理工大学2006十一、2(25/2分)】
【正确答案】正确答案:(1)设根的层数为1,进行遍历,在遍历中填写结点的层数,结点的最大层次就是所求。 (2)若任一结点其左右子女的层次差的绝对值大于1,则不是平衡二叉排序树。 void BiTreeDep七h(BiTree T,int depth) {if(!T)return 0; else{T一>depth++; if(T一>depth>maxdepth)maxdepth=T一>depth; //maxdepth是全局变量,初值0 if(T一>Ichild)BiTreeDepth(T一>Ichild,depth+1); //左子树上各结点的层次 if(T一>rchild)BiTreeDepth(T一>rchild,depth+1); //右子树上各结点的层次 } }//使用BiTreeDepth(T,0)调用
【答案解析】