题解 | #牛群的最长距离#
牛群的最长距离
https://www.nowcoder.com/practice/82848c6aa1f74dd1b95d71f3c35c74d5
考察的知识点:二叉树的递归遍历;
解答方法分析:
- 首先,在
diameterOfBinaryTree
函数中,需要定义一个变量diameter
用于记录最大路径长度,并初始化为0。 - 然后,在递归函数
depth
中,对当前节点进行处理:如果当前节点为空,返回0。否则,递归求解当前节点的左子树的高度和右子树的高度,并分别赋值给left和right。计算当前节点为根节点时的路径长度,即左子树高度和右子树高度之和,并将其与diameter比较,更新diameter的值。返回以当前节点为根节点的子树的最大高度,即左子树高度和右子树高度的较大值加1。 - 最后,在主函数中调用
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; } };