【31】给定一个二叉树打印出所有从根结点到叶子结点路径和为 k 的路径
http://blog.csdn.net/chenguolinblog/article/details/30286375
题目:给定一个二叉树要求打印出所有从根结点到叶子结点路径和为value的路径
例如,给定二叉树如下要求打印出所有和为9的路径,有1->6->3->-1和1->7->4->-3
分析:
1. 要找到所有的路径,利用前序遍历即可做到,我们维护一个数组保存路径上面的点,同时维护一个sum,当到达叶子结点的时候判断是否相等即可
2. 代码
- //二叉树结点
- struct BinaryTreeNode{
- int value;
- BinaryTreeNode *lson;
- BinaryTreeNode *rson;
- };
- //打印路径
- void Print(int *path, int n){
- for(int i = 0; i < n; i++){
- cout<<path[i]<<" ";
- }
- cout<<endl;
- }
- //打印和为k的所有路径
- void PrintPath(BinaryTreeNode *root, int *path, int pos, int sum, int k){
- //不合法数据
- if(path == NULL){
- return;
- }
- //到底叶子结点
- if(root == NULL){
- //和为value就打印
- if(sum == k){
- Print(path, pos);
- }
- }
- path[pos] = root->value;
- PrintPath(root->lson, path, pos+1, sum+root->value, k);
- PrintPath(root->rson, path, pos+1, sum+root->value, k);
- }