题目:输入一颗二叉树和一个整数 打印出二叉树中结点值的和为输入整数的所有路径 从输的根节点开始往下一直到叶节点所经过的节点构成一条路径
二叉树的定义如下:
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode *m_pLeft;
BinaryTreeNode *m_pRight;
};
当用前序遍历方式访问到某一个结点时 我们把该结点添加到路径上 并计算当前路径的和 如果该节点为叶节点且路径和刚好等于输入的值
则打印出该路径
如果当前结点不是叶节点 则继续访问其子节点 当前结点访问结束后 递归函数将自动回到父节点 因此在函数退出之前要在路径上删除当前结点并减去结点值
void Isum(BinaryTreeNode *root,int sum,int n,vector<int>&path)
{
sum+=root->m_nValue;
path.push_back(root->m_nValue);
bool Isleaf=root->m_pLeft==NULL && root->m_pRight==NULL;
if(sum==n && Isleaf)
{
cout<<"Path :";
vector<int>::iterator iter=path.begin();
for(;iter!=path.end();iter++)
cout<<*iter;
cout<<endl;
}
if(root->m_pLeft!=NULL)
Isum(root->m_pLeft,sum,n,path);
if(root->m_pRight!=NULL)
Isum(root->m_pRight,sum,n,path);
sum=sum-root->m_nValue;
path.pop_back();
}