问答题 在二叉排序树的结构中,有些数据元素值可能是相同的,设计一个算法实现按递增有序打印结点的数据域,要求相同的数据元素仅输出一个,算法还应能报出最后被滤掉而未输出的数据元素个数,对如图所示的二叉排序树,输出为:10,12,13,15,18,21,27,35,42。滤掉3个元素。【北京工业大学1995六(18分)】
【正确答案】正确答案:采用中序遍历,将遍历结点与前驱比较,若相同,则不输出并记数。核心语句段如下: if(t) {BSTPrint(t一>ichild); //中序遍历左子树 if(pre==null)pre=t; //pre是当前访问结点的前驱,调用本算法时初值为null else if(pre一>key==t一>key)count++;//count记重复元素,初值为0 else{cout<keyl pre=t;) //前驱后移 BSTPrint(t一>rchiid); //中序遍历右子树 }//if
【答案解析】