在二元树中找出和为某一值的所有路径

stuman 2017-08-15 01:17:07

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();
}

我看不懂的地方在这段代码的最后两行,为什么要删除当前节点,退至其父节点?上面的两个递归 findPath调用已经遍历所有节点了,为什么还要回退呢?
整个问题的描述见:http://www.cnblogs.com/qi09/archive/2011/05/24/2055643.html
...全文
97 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2017-08-17
  • 打赏
  • 举报
回复
如果访问到了叶节点,但结果不能满足,自然要回退,删除是指的从栈里弹出。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧