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