给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
示例 :
给定二叉树
1
/ \
2 3
/ \
4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
深度优先搜索
直径就是两个节点路径长度的最大值。
每个路径长度可以拆解为左子树和右子树的深度两部分之和。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
class Solution { int ans = 0; int depth(TreeNode* root) { if (root == nullptr){ return 0; } int l = depth(root->left); int r = depth(root->right); ans = max(ans, l + r); return max(l, r) + 1; } public: int diameterOfBinaryTree(TreeNode* root) { depth(root); return ans; } };
|
NC99 多叉树的直径
如果换成多叉树,该如何处理呢?