#include <iostream> #include <vector> using namespace std; typedef struct BitTree { int data; struct BitTree *m_pLeft,*m_pRight; }*NodeTree,nodetree; void Creat_Tree(NodeTree &tree); void FinfPath(NodeTree &path_tree, int expercetSum, std::vector<int> &path , int& CurrentSum); int main() { NodeTree m_tree; Creat_Tree(m_tree); int experNum; cin>>experNum; std::vector<int> path; int CurrentSum=0; FinfPath(m_tree,experNum,path,CurrentSum); system("pause"); return 0; } void Creat_Tree(NodeTree &tree) { int data; cin>>data; if (data==0) { tree=NULL; return; } tree=new nodetree; if (tree==NULL) { exit(0); } tree->data=data; //创建左子树 Creat_Tree(tree->m_pLeft); //创建右子树 Creat_Tree(tree->m_pRight); } void FinfPath(NodeTree &path_tree,int expercetSum,std::vector<int> &path,int &CurrentSum) { if (path_tree==NULL) { return; } //求访问路径和与把访问路径的值放入vector中 CurrentSum+=path_tree->data; path.push_back(path_tree->data); bool b_node=(!path_tree->m_pLeft && !path_tree->m_pRight); if (b_node==true && CurrentSum==expercetSum) { //遍历vector std::vector<int>::iterator itr=path.begin(); for (;itr!=path.end();++itr) { cout<<*itr<<" "; } cout<<endl if="" path_tree-="">m_pLeft!=NULL) { FinfPath(path_tree->m_pLeft,expercetSum,path,CurrentSum); } //右子树 if (path_tree->m_pRight!=NULL) { FinfPath(path_tree->m_pRight,expercetSum,path,CurrentSum); } //减去之前访问了的点 CurrentSum-=path_tree->data; path.pop_back(); } </endl></int></int></int></int></vector></iostream>