在二元树中找出和为某一值的所有路径
题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如输入整数22 和如下二元树
10
/ \
5 12
/ \
4 7
题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如输入整数22 和如下二元树
10
/ \
5 12
/ \
4 7
则打印出两条路径:10, 12 和10, 5, 7。
typedef vector<TreeNode*>::iterator TreeIter;
void GetTreePath(TreeNode *root,int &sum,int n,vector<TreeNode*> &path)
{
if(root==NULL)
return;
path.push_back(root);
sum+=root->data;
if(sum==n)
{
cout<<"path : ";
for(TreeIter iter=path.begin();iter!=path.end();iter++)
cout<<(*iter)->data<<" ";
cout<<endl;
}
else
{
GetTreePath(root->left,sum,n,path);
GetTreePath(root->right,sum,n,path);
}
//不管sum是不是等于n。计算在内的root在计算完都要出栈。
sum-=root->data;
path.pop_back();
}
void GetTreePath(TreeNode *root,int &sum,int n)
{
vector<TreeNode*> path;
GetTreePath(root,sum,n,path);
}
void GetTreePathTest()
{
TreeNode* root=NULL;
cout<<"make tree"<<endl;
MakeTree(root);
cout<<"the tree : ";
LevelOrderTraverse(root);
cout<<"the tree : "<<endl;
LevelOrderTraverse1(root);
cout<<"the tree : ";
PreOrderTraverseNoRecursion(root);
int n=0;
cout<<"input path sum : ";
cin>>n;
int sum=0;
cout<<"all paths equal sum : "<<endl;
GetTreePath(root,sum,n);
}