好了,刚帮你写好一个满足你的要求的递归函数,试验一下吧:
/////////////////////////////////////////////////////
//getParent()私有成员函数
//递归:在子树subTree中找指定结点p的父结点
//如果找到就返回该结点指针,否则返回NULL
/////////////////////////////////////////////////////
template<class T>
TreeNode<T>* Tree<T>::getParent(TreeNode<T>* subTree,TreeNode<T>* p)
{
    //如果要找的不是是根结点而且子树不空
    if(subTree!=NULL && p!=subTree
        && subTree->firstChild!=NULL)
    {
        //游标指针,遍历subTree的所有子结点
        TreeNode<T>* ptr=subTree->firstChild;
        //在subTree的所有子女中找看是否是结点p
        while(ptr!=NULL)
        {
            //如果p是subTree的子结点
            if(ptr==p)
                //返回父结点
                return subTree;
            else
            {
                //在子树中递归寻找
                TreeNode<T>* temp=getParent(ptr,p);
                //如果没有
                if(temp!=NULL)
                    return temp;
                else
                    ptr=ptr->nextSibling;
            };
        };
        //所有子树中都没有找到
        return NULL;
    }
    else
        return NULL;
};
//////////////////////////////getParent()私有函数结束
[[it] 本帖最后由 geninsf009 于 2008-8-25 23:19 编辑 [/it]]