我用visual stuido 2010 写下面二叉树的查找程序,
目的是使类中pCurrent指 针指向匹配的节点(Node<T>*),同时能发现父节点。
template<class T>
Node<T>* Tree<T>::FindNode_BSTree(Node<T>* & pNode, const T& datavalue, Node<T>* & pParent) const
{
if(pNode==NULL)
return NULL;
if(pNode->data==datavalue)
return pNode;
if(datavalue<pNode->data)
return FindNode_BSTree(pNode->pLeftChild,datavalue,pNode);
else
return FindNode_BSTree(pNode->pRightChild,datavalue,pNode);
};
查找匹配节点程序:
template<class T>
bool Tree<T>::Find_BSTree(const T& datavalue)
{
Node<T>* pParent=NULL;
FindNode_BSTree(pCurrent,datavalue,pParent);
};
查找匹配节点父节点的程序:
template<class T>
Tree<T>* Tree<T>::GetParent()
{
Node<T>* pParent=NULL;
FindNode_BSTree(pCurrent,pCurrent->data,pParent);
};
按理说,指针的引用传递参数,外层实参指针随着形参改变而改变指向的位置。
结果,最后一打印pCurrent,pParent的值,还是原来的初始值,没有改变。很是奇怪。是编译器的问题还是程序的问题?
c++ c 二叉树,树 tree 指针的引用
------解决方案--------------------------------------------------------
你声明为了引用,但是你好像也没有改变实参啊,我给了下你的查找函数,你参考下,看看可行:
template<class T>
Node<T>* Tree<T>::FindNode_BSTree(const Node<T>* pNode, const T& datavalue, const Node<T>* & pParent) const
{
if(pNode ==NULL
------解决方案--------------------------------------------------------
pNode->data==datavalue)
return pNode;
pParent = pNode;
if(datavalue<pNode->data)
return FindNode_BSTree(pNode->pLeftChild,datavalue,pParent);
else
return FindNode_BSTree(pNode->pRightChild,datavalue,pParent);
};
------解决方案--------------------------------------------------------
不是这样的吧
------解决方案--------------------------------------------------------
在递归的过程中第一个参数是需要一级一级的向下伸展的,使用指针的引用是没有复制一份临时的指针,而是直接使用了pNode->pLeftChild指针域中的值,再说在程序中仅仅是查找并没有涉及到下层修改上层的指针指向的