33,007
社区成员
发帖
与我相关
我的任务
分享
void findPath(BinaryTreeNode *pTreeNode,
int expectedSum,
vector<int>& path,
int & currentSum)
{
if( !pTreeNode )
return;//结点值添加至当前和变量中//结点压入栈中
currentSum += pTreeNode->m_nValue;
path.push_back(pTreeNode->m_nValue);
bool isLeaf = !(pTreeNode->m_pLeft) && !(pTreeNode->m_pRight);//当前结点为叶子结点,且和为期望值,打印路径
if(currentSum == expectedSum && isLeaf)
{
vector<int>::iterator iter;
for(iter = path.begin(); iter != path.end(); iter++)
{
cout << *iter << "\t";
}
cout << endl;
}//当前结点不为叶子结点,查找它的左右孩子结点
if(pTreeNode->m_pLeft)
findPath(pTreeNode->m_pLeft, expectedSum, path, currentSum);
if(pTreeNode->m_pRight)
findPath(pTreeNode->m_pRight, expectedSum, path, currentSum);
//当前结点删除,退至其父结点
currentSum -= pTreeNode->m_nValue;
path.pop_back();
}