输入一个二叉树,查找该树的所有路径(从根结点到叶结点的通路),并返回和(路径上所有结点值的和)为某一指定值的路径。
1 /////////////二叉树中和为某一值的路径/////////////////////
2 void FindPath(BinaryTreeNode* pRoot ,int expectedSum ,vector<int>& path ,int currentSum)
3 {
4 if (pRoot == NULL)
5 {
6 return;
7 }
8 currentSum += pRoot->m_nValue;
9 path.push_back(pRoot->m_nValue);
10 //如果是叶子结点,且结点的和等于希望的值,打印出这条路径
11 if (currentSum == expectedSum && pRoot->m_pLeft == NULL && pRoot->m_pRight == NULL)
12 {
13 cout<<"Find a path : ";
14 vector<int>::iterator iter = path.begin();
15 for (;iter != path.end() ; iter++)
16 {
17 cout<<*iter<<" ";
18 }
19 cout<<endl;
20 }
21 if (pRoot->m_pLeft)
22 {
23 FindPath(pRoot->m_pLeft ,expectedSum ,path ,currentSum);
24 }
25 if (pRoot->m_pRight)
26 {
27 FindPath(pRoot->m_pRight ,expectedSum ,path ,currentSum);
28 }
29 //currentSum = currentSum - path.back();
30 path.pop_back();
31 }
32 void FindPath(BinaryTreeNode* pRoot , int expectedSum)//用户接口
33 {
34 if (pRoot == NULL)
35 {
36 return;
37 }
38 int currentSum = 0 ;
39 vector<int> vec ;
40 FindPath(pRoot ,expectedSum ,vec , currentSum );
41
42 }
时间: 2024-11-08 03:44:31