天天看点

求二叉树中最远的两个节点的距离

求两个节点之间最远的距离:      (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;
       }
           

继续阅读