【转】在二元树中找出和为某一值的所有路径


二叉树中叶子结点到根的最长路径和最短路径

struct Node {
    int data;
    struct Node* left;
    struct Node* right;
}

//遍历树 获取 根结点到叶结点的path, 得到path里,更新一下 最短路径 和 最长路径
  1. void preorder( Node* pNode, vector<Node*>& path, vector<Node*>& longest, vector<Node*>& shortest ) {  
  2.     if( pNode == 0 ) {  
  3.         if( longest.size() < path.size() ) {  
  4.             longest = path;  
  5.         } else if( shortest.size() == 0 || shortest.size() > path.size() ) {  
  6.             shortest = path;  
  7.         }  
  8.     } else {  
  9.         path.push_back( pNode );  
  10.         postorder( pNode->left, path, longest, shortest );  
  11.         postorder( pNode->right, path, longest, shortest );  
  12.         path.pop_back();  
  13.     }  
  14. }  
  15.   
  16. void printPath( vector<Node*>& path ) {  
  17.     forint i = 0, n = path.size(); i < n; i++ ) {  
  18.         printf( "%d ", path[i]->data );  
  19.     }  
  20.     printf( "\n" );  
  21. }  
  22.   
  23. void test( Node* root ) {  
  24.     vector<Node*> path;  
  25.     vector<Node*> longest;  
  26.     vector<Node*> shortest;  
  27.   
  28.     postorder( root, path, longest, shortest );  
  29.   
  30.     printf("longest:" );  
  31.     printPath( longest );  
  32.     printf( "shortest:" );  
  33.     printPath( shortest );  
  34. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值