考察的知识点:二叉树的递归遍历;

解答方法分析:

  1. 首先,在diameterOfBinaryTree函数中,需要定义一个变量diameter用于记录最大路径长度,并初始化为0。
  2. 然后,在递归函数depth中,对当前节点进行处理:如果当前节点为空,返回0。否则,递归求解当前节点的左子树的高度和右子树的高度,并分别赋值给left和right。计算当前节点为根节点时的路径长度,即左子树高度和右子树高度之和,并将其与diameter比较,更新diameter的值。返回以当前节点为根节点的子树的最大高度,即左子树高度和右子树高度的较大值加1。
  3. 最后,在主函数中调用depth函数,并返回最大路径长度diameter

所用编程语言:C++;

完整编程代码:↓

/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;
 *  struct TreeNode *right;
 *  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
  public:
    int diameterOfBinaryTree(TreeNode* root) {
        int diameter = 0;
        depth(root, diameter);
        return diameter;
    }

    int depth(TreeNode* node, int& diameter) {
        if (!node) {
            return 0;
        }

        int left = depth(node->left, diameter);
        int right = depth(node->right, diameter);

        diameter = max(diameter, left + right);

        return max(left, right) + 1;
    }
};