二叉树中叶子结点到根的最长路径和最短路径
- 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 );
- }