好啦,替你搞定了,刚写的递归算法:
//////////////////////////////////////////////////
//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]]