543. 二叉树的直径

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。

示例 :

给定二叉树

  1
/ \
2 3

/ \

4 5

返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。

注意:两结点之间的路径长度是以它们之间边的数目表示。

PS:

二叉树的直径不一定过根节点,因此需要去搜一遍所有子树(例如以root,root.left, root.right…为根节点的树)对应的直径,取最大值。

root的直径 = root左子树高度 + root右子树高度

root的高度 = max {root左子树高度, root右子树高度} + 1

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private int max = 0; public int diameterOfBinaryTree(TreeNode root) {
dfs(root);
return max;
} private int dfs(TreeNode root) {
if (root == null) {
return 0;
}
int leftHeight = dfs(root.left), rightHeight = dfs(root.right);
max = Math.max(leftHeight + rightHeight, max);
return Math.max(leftHeight, rightHeight) + 1;
}
}

最新文章

  1. MeshDog
  2. SpringJDBC解析3-回调函数(update为例)
  3. discuz论坛与其它网站登录注册整合
  4. yum只下载而不安装软件包?
  5. HDU 4974 Dracula and Ethan 优先队列
  6. Java之--Java语言基础组成(关键字、标识符、注释、常量和变量、运算符)
  7. HDU5780 gcd 欧拉函数
  8. JavaScript奇技淫巧44招
  9. ORacle 复制表
  10. [BZOJ 2064]分裂
  11. 剑指Offer——银行考试
  12. mysql数据库连接语句一定要加传参的编码格式
  13. 7.12 vowels.c 程序
  14. C++的正则
  15. GitHub私有代码库将免费开放
  16. EF学习笔记-2 EF之支持复杂类型的实现
  17. Flutter - 添加从左向右滑动,返回上一个页面
  18. href="javascript:void(0)" 的用法
  19. linux提示usb_serial_generic_write_bulk_callback - urb stoped: -32
  20. Hibernate(六)一对多映射(多对一)

热门文章

  1. 关于 k210 的 micropython 添加 ussl 模块,实现 https 访问支持的那些事。
  2. sqlite聚合函数
  3. Adaboost原理及相关推导
  4. 疯狂VirtualBox实战讲学录 以及 virtualbox完全学习手册 之我见
  5. 利用js实现 禁用浏览器后退| 去除上一个历史记录链接
  6. oracle分析函数Rank, Dense_rank, row_number
  7. Linux——vim操作
  8. SVN创建分支的相关操作
  9. JS中的基本包装类型
  10. 三,<ul><li>实际应用时遇到的问题