好了,刚帮你写好一个满足你的要求的递归函数,试验一下吧:
/////////////////////////////////////////////////////
//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]]