//二叉树中和为某一值的路径
void FindPath(BtNode* pRoot,int expectedSum,vector& path,int currentSum)
{
currentSum += pRoot->m_val;
path.push_back(pRoot->m_val);
//如果是叶节点,并且路径上的点和等于输入的值
//打印这条路径
bool isLeaf = pRoot->m_pleft==NULL && pRoot->m_pright==NULL;
if(currentSum == expectedSum && isLeaf)
{
cout<<"A path is found: ";
vector<int>::iterator it = path.begin();
for(;it!=path.end();++it)
{
cout<<*it<<" ";
}
cout<<endl;
if(pRoot->m_pleft)
FindPath(pRoot->m_pleft,expectedSum,path,currentSum);
if(pRoot->m_pright)
FindPath(pRoot->m_pright,expectedSum,path,currentSum);
}
//再返回到父节点之前,在路径上删除当前结点
//在currentSum中减去当前的结点的值
currentSum -= pRoot->m_val;
path.pop_back();
}
void FindPath(BtNode* pRoot,int expectedSum)
{
if(pRoot == NULL)
return;
vector path;
int currentSum = 0;
FindPath(pRoot,expectedSum,path,currentSum);
}