题目描述:
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
示例 :
给定二叉树
1
/ \
2 3
/ \
4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意:两结点之间的路径长度是以它们之间边的数目表示。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diameter-of-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
按照题意,一颗二叉树的直径应该是max(子树的左高度+该子树的右高度) for 子树 in 二叉树。
以题目中的例子为例:直径应该为 以1为根节点的子树的左高渡(2)+该子树的右高度(1) = 3。
采用DFS的方式求取当前节点的高度。
参考代码:
//return the height of the node
int dfs(TreeNode *node, int &max) {
if (node == NULL)
return -1;
if (node->left == NULL && node->right == NULL)
return 0;
int leftHeight = dfs(node->left, max);
int rightHeight = dfs(node->right, max);
if (leftHeight + rightHeight + 2 > max)
max = leftHeight + rightHeight + 2;
return leftHeight >= rightHeight ? (leftHeight + 1) : (rightHeight+ 1);
}
int diameterOfBinaryTree(TreeNode* root) {
if (root == NULL)
return 0;
int max = 0;
dfs(root, max);
return max;
}