二叉树中相距最远的两个节点之间的距离

来源:互联网 发布:淘宝客没有pid 编辑:程序博客网 时间:2024/06/01 10:27
  • 看了milo的解答:《编程之美: 求二叉树中节点的最大距离》的另一个解法
struct TreeNode{    TreeNode * left;    TreeNode * right;    int val;    TreeNode(int _val, TreeNode * _left, TreeNode * _right) :        val(_val), left(_left), right(_right){}    TreeNode(int _val) :val(_val), left(NULL), right(NULL){}};struct Result{    int maxDistance;    int maxDepth;    Result(int _maxDistance, int _maxDepth) :        maxDistance(_maxDistance), maxDepth(_maxDepth){}    Result(){}};Result getMaxDis(TreeNode * root){    if (!root){        return Result(0, -1); //depth在上层会加上1,所以这里传入0    }    Result res;    Result resLeft = getMaxDis(root->left);    Result resRight = getMaxDis(root->right);    res.maxDepth = max(resLeft.maxDepth, resRight.maxDepth) + 1;    res.maxDistance = max(max(resLeft.maxDistance, resRight.maxDistance), resLeft.maxDepth + resRight.maxDepth + 2);    return res;}int getMaxDistance(TreeNode * root){    Result result = getMaxDis(root);    return max(result.maxDepth, result.maxDistance);}
  • 还有一种方式也是大同小异的:
void longestPathUtil(Node* root, int& left_len, int& right_len, int& max_len);  int longestPath(Node* root)  {      int left_len, right_len, max_len;      longestPathUtil(root, left_len, right_len, max_len);      return max_len;  }  void longestPathUtil(Node* root, int& left_len, int& right_len, int& max_len)  {      if(root==NULL)      {          left_len = 0;          right_len = 0;          max_len = 0;          return;      }      int left_len1, right_len1, left_len2, right_len2;      longestPathUtil(root->left, left_len1, right_len1, max_len);      longestPathUtil(root->right, left_len2, right_len2, max_len);      left_len = 1+max(left_len1, right_len1);      right_len = 1+max(left_len2, right_len2);      max_len = max(left_len+right_len-1, max_len);   }  
0 0