好啦,替你搞定了,刚写的递归算法:
//////////////////////////////////////////////////
//SearchpreOrder()私有成员函数
//得到前序序列中第k个结点的指针
//////////////////////////////////////////////////
template<class T>
BinTreeNode<T>* BinaryTree<T>::SearchpreOrder(int k,BinTreeNode<T>* subTree)
{
if(subTree!=NULL)
{
int T=Size(subTree);
//树的总结点数
int TL=Size(subTree->leftChild); //树的左子树结点数
int TR=Size(subTree->rightChild);//树的右子树结点数
if(k==1)
//如果k=1,那要找的就是子树根结点
return subTree;
else if((k-1)<=TL)
//如果在左子树中
return SearchpreOrder(k-1,subTree->leftChild);
else if((k-1)>TL && k<=T) //如果在右子树中
return SearchpreOrder(k-1-TL,subTree->rightChild);
else
//如果超过树的总结点数
return NULL;
}
else
return NULL;
};
/////////////////////////私有SearchOrder()函数结束
其中用到的Size()也是个私有递归函数,定义如下:
//////////////////////////////////////////////////
//私有成员函数Size()
//得到二叉树的总接点的个数
//////////////////////////////////////////////////
template<class T>
int BinaryTree<T>::Size(BinTreeNode<T>* subTree)
{
//子树为空,则结点数为0
if(subTree==NULL)
return 0;
else
return 1+Size(subTree->leftChild)+Size(subTree>rightChild);
};
////////////////////////////////////Size()函数结束
[[it] 本帖最后由 geninsf009 于 2008-8-23 20:09 编辑 [/it]]