题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
10
/ /
5 12
/ \
4 7
则打印出两条路径:10, 12和10, 5, 7。
二元树节点的数据结构定义为:
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
void FindPath(BinaryTreeNode* pRoot,int expectsum)
{
if(pRoot==NULL) return;
vector<int> path;
int currsum = 0;
FindPath(pRoot,expectsum,path,currsum);
}
void FindPath(BinaryTreeNode* pRoot,int expectsum,vector<int> &path,int currsum)
{
currsum += pRoot->m_nValue;
path.push_back(pRoot->m_nValue);
bool isleaf = (pRoot->m_pLeft == NULL) && (pRoot->m_pRight == NULL);
if(currsum == expectsum && isleaf == true)//达到叶节点,并且是期望和
{
int n = path.size();
for (int i=0; i<n; ++i)
{
cout<<path[i]<<" ";
}
cout<<endl;
}
if(pRoot->m_pLeft!=NULL)//递归在左子树找
FindPath(pRoot->m_pLeft,expectsum,path,currsum);
if(pRoot->m_pRight!=NULL)//递归在右子树找
FindPath(pRoot->m_pRight,expectsum,path,currsum);
path.pop_back();//返回父节点时候,弹出当前节点,返回父节点
}