天天看點

求二叉樹中最遠的兩個節點的距離

求兩個節點之間最遠的距離:      (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;
       }
           

繼續閱讀