//============================================================================ // Name : 100题之.cpp // Author : // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> #include<vector> using namespace std; class Node { public: int date; Node*left; Node*right; Node(int date1=0):date(date1),left(NULL),right(NULL){} }; class Tree { public: Node *root; vector<int>vec; void Create_tree(Node**root,int date); void findPath(const Node*root,int length); Tree():root(NULL){} void print_tree( Node*root); }; void Tree::Create_tree(Node**root,int date) { if(*root==NULL) { Node*p=new Node; p->date=date; *root=p; } else { if(((*root)->date)>date) { Create_tree(&((*root)->left), date); } else if(((*root)->date)<date) { Create_tree(&((*root)->right), date); } } } void Tree::print_tree( Node*root) { if(root) { print_tree(root->left); cout<<root->date<<" "; print_tree(root->right); } } void Tree::findPath(const Node*root,int length) { if(!root) return; if(root&&!root->left&&!root->right) { if(length==root->date) { for(vector<int>::iterator it=vec.begin();it!=vec.end();it++) { cout<<*it<<" "; } cout<<root->date<<endl; } return; } if(root->left) { vec.push_back(root->date); findPath(root->left,length-root->date); vec.pop_back(); } if(root->right) { vec.push_back(root->date); findPath(root->right,length-root->date); vec.pop_back(); } } int main() { Tree tree; tree.Create_tree(&tree.root,8); tree.Create_tree(&tree.root,6); tree.Create_tree(&tree.root,10); tree.Create_tree(&tree.root,5); tree.Create_tree(&tree.root,7); tree.Create_tree(&tree.root,9); tree.Create_tree(&tree.root,11); tree.Create_tree(&tree.root,2); //tree.print_tree(tree.root); tree.findPath(tree.root,21); //tree.print_tree(tree.root); return 0; }