这里与之前不同的是,我们选择的路径的规定是起点可以是任何节点,同样终点也可以是任何节点
#include<iostream>
#include<vector>
using namespace std;
struct Node{
int val;
Node* left;
Node* right;
Node(int x=0):val(x),left(NULL),right(NULL){
}
};
void findpath(Node* root,vector<Node*>&vec){
if(NULL!=root)
{
vec.push_back(root);
if(root->left==NULL&&root->right==NULL)
{
;
}
else{
findpath(root->left,vec);
findpath(root->right,vec);
}
//计算其中的和是不是符合题意
vector<Node*>::iterator itr=vec.begin();
int sum=0;
for(;itr!=vec.end();itr++)
{
sum+=(*itr)->val;
}
if(sum==12)
{
cout<<"we found it\n";
}
vec.pop_back();
}
}
void Travel(Node* root)
{
if(root!=NULL)
{
vector<Node*> m_vec;
findpath(root,m_vec);
Travel(root->left);
Travel(root->right);
}
}
int main()
{
Node *tmp ;
Node* root = new Node(10);
tmp = new Node(5);
root->left = tmp ;
tmp = new Node(12);
root->right = tmp;
tmp = new Node(4);
root->left->left = tmp;
tmp = new Node(7);
root->left->right = tmp;
vector<Node*> v;
Travel(root);
return 0;
}