题目考察的知识点
- 二叉树
- 递归
题目解答方法的文字分析
一条路径的长度为该路径经过的节点数减一.则牛群的最长距离为该路径上的节点数减一。而一条路径均可以被看作由某个节点为起点,从其左儿子和右儿子向下遍历的路径拼接得到。 深度优先遍历, 递归找到每个节点左右子树的最大深度之和,找出最大那一个即可。
遍历每个节点,统计每个节点能形成的最大直径
本题解析所用的编程语言
- cpp
完整且正确的编程代码
class Solution { // 计算二叉树的直径 int ans = 0; public: int diameterOfBinaryTree(TreeNode* root) { helper(root); return ans; } // 返回以该节点为根的树的最大深度 int helper(TreeNode* node) { if (!node) return 0; int left = helper(node->left); int right = helper(node->right); if(left+right>0)ans = max(ans, left + right); return max(left, right)+1; } }; /* 2023年8月8日,自己 */
EOF