求兩個節點之間最遠的距離: (1)兩個節點都是葉子結點 (2)一個是葉子結點一個是根節點
思路: (1)如果具有最遠距離的兩個節點經過了根節點,那麼最遠的距離就是左邊最深的深度加上右邊最深的深度之和。 (2)如果具有最遠距離的兩個節點之間的路徑不經過根節點,那麼最遠的距離就在根節點的其中一個子樹上的兩個葉子結點。
int GetFarDistance()
{
int distance = -1;
_Height(_root,distance);
return distance;
}
protected:
int _Height(Node* root, int& distance)
{
if (root == NULL)
{
return 0;
}
int leftH = _Height(root->_left);
int rightH = _Height(root->_right);
if (leftH+rightH > distance)
{
distance = leftH + rightH;
}
return leftH > rightH ? leftH+1 : rightH+1;
}