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


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

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

//遍历树 获取 根结点到叶结点的path, 得到path里,更新一下 最短路径 和 最长路径
void preorder( Node* pNode, vector<Node*>& path, vector<Node*>& longest, vector<Node*>& shortest ) {
    if( pNode == 0 ) {
        if( longest.size() < path.size() ) {
            longest = path;
        } else if( shortest.size() == 0 || shortest.size() > path.size() ) {
            shortest = path;
        }
    } else {
        path.push_back( pNode );
        postorder( pNode->left, path, longest, shortest );
        postorder( pNode->right, path, longest, shortest );
        path.pop_back();
    }
}

void printPath( vector<Node*>& path ) {
    for( int i = 0, n = path.size(); i < n; i++ ) {
        printf( "%d ", path[i]->data );
    }
    printf( "\n" );
}

void test( Node* root ) {
    vector<Node*> path;
    vector<Node*> longest;
    vector<Node*> shortest;

    postorder( root, path, longest, shortest );

    printf("longest:" );
    printPath( longest );
    printf( "shortest:" );
    printPath( shortest );
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值