static int tree_height(const Node* root, int& max_distance) { const int left_height = root->left ? tree_height(root->left, max_distance) + 1 : 0; const int right_height = root->right ? tree_height(root->right, max_distance) + 1 : 0; const int distance = left_height + right_height; if (max_distance < distance) max_distance = distance; return (left_height > right_height ? left_height : right_height); } int tree_diameter(const Node* root) { int max_distance = 0; if (root) tree_height(root, max_distance); return max_distance; }
這種思路很簡單,再求Height的時候順便求出每一個Node的左右子樹的Height的最大值spa