【31】给定一个二叉树打印出所有从根结点到叶子结点路径和为 k 的路径

来源:互联网 发布:英语哪个软件好 编辑:程序博客网 时间:2024/04/29 14:32

【31】给定一个二叉树打印出所有从根结点到叶子结点路径和为 k 的路径

 http://blog.csdn.net/chenguolinblog/article/details/30286375


题目:给定一个二叉树要求打印出所有从根结点到叶子结点路径和为value的路径

          例如,给定二叉树如下要求打印出所有和为9的路径,有1->6->3->-1和1->7->4->-3

          


分析:

1. 要找到所有的路径,利用前序遍历即可做到,我们维护一个数组保存路径上面的点,同时维护一个sum,当到达叶子结点的时候判断是否相等即可


2. 代码

[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
  1. //二叉树结点  
  2. struct BinaryTreeNode{  
  3.     int value;  
  4.     BinaryTreeNode *lson;  
  5.     BinaryTreeNode *rson;  
  6. };   
  7.   
  8. //打印路径  
  9. void Print(int *path, int n){  
  10.     for(int i = 0; i < n; i++){  
  11.         cout<<path[i]<<" ";   
  12.     }  
  13.     cout<<endl;   
  14. }   
  15.   
  16. //打印和为k的所有路径  
  17. void PrintPath(BinaryTreeNode *root, int *path, int pos, int sum, int k){  
  18.     //不合法数据   
  19.     if(path == NULL){  
  20.         return;  
  21.     }  
  22.     //到底叶子结点   
  23.     if(root == NULL){  
  24.         //和为value就打印   
  25.         if(sum == k){  
  26.             Print(path, pos);  
  27.         }  
  28.     }  
  29.     path[pos] = root->value;  
  30.     PrintPath(root->lson, path, pos+1, sum+root->value, k);  
  31.     PrintPath(root->rson, path, pos+1, sum+root->value, k);  
  32. }   


版权声明:本文为博主原创文章,未经博主允许不得转
0 0