力扣 hot100 Day36
543. 二叉树的直径
给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root
。
两节点之间路径的 长度 由它们之间边数表示。
//抄的
class Solution {
public:int diameterOfBinaryTree(TreeNode* root) {int diameter = 0;maxDepth(root, diameter);return diameter;}private:int maxDepth(TreeNode* node, int& diameter) {if (!node) return 0;int leftDepth = maxDepth(node->left, diameter);int rightDepth = maxDepth(node->right, diameter);diameter = max(diameter, leftDepth + rightDepth);return max(leftDepth, rightDepth) + 1;}
};
很直观能想到和最大深度相关。
在求最大深度过程中,利用引用维护一个diameter,对应最大长度。
最大深度函数仍旧是递归逻辑,对于一个根节点,最大深度为max(left,right)+1。
主要是实时记录diameter,相当于在递归中实现了每个根节点中比较一次diameter和左深度+右深度,从而做到不遗漏。