来源于 http://blog.csdn.net/bvbook/archive/2008/07/25/2710209.aspx #include <stack> #include <algorithm> using namespace std; struct Node { bool _visited; Node* left; Node* right; int maxLeft; int maxRight; Node() { _visited = false; maxLeft = 0; maxRight = 0; left = NULL; right = NULL; } }; int maxLen = 0; stack<Node*> nodeStack; void findMaxLen( Node* root ) { Node* node; if ( root == NULL ) { return ; } nodeStack.push( root ); while( !nodeStack.empty()) { node = nodeStack.top(); if ( node->left == NULL && node->right == NULL ) { nodeStack.pop(); node->_visited = true; continue; } if ( node->left ) { if ( !node->left->_visited ) { nodeStack.push( node->left ) ; } else { node->maxLeft = max( node->left->maxLeft,node->left->maxRight ) + 1; } } if ( ( !node->left || node->left->_visited ) && node->right ) { if ( !node->right->_visited ) { nodeStack.push( node->right ) ; } else { node->maxRight = max( node->right->maxLeft,node->right->maxRight ) + 1; } } if (( !node->left || node->left->_visited ) && ( !node->right || node->right->_visited )) { maxLen = max( maxLen, node->maxLeft + node->maxRight ); node->_visited = true; nodeStack.pop(); } } } Immediate test case 1: int main() { Node *tmp ; Node* root = new Node(); tmp = new Node(); root->left = tmp ; tmp = new Node(); root->right = tmp; tmp = new Node(); root->right->right = tmp; tmp = new Node(); root->right->right->right = tmp; tmp = new Node(); root->right->right->right->left = tmp; findMaxLen( root ); cout << maxLen << endl; return 0; } 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bvbook/archive/2008/07/25/2710209.aspx