Skip to content

Commit 0279da7

Browse files
author
王鹏
committed
feat(EASY): add _543_diameterOfBinaryTree
1 parent 888e2b6 commit 0279da7

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package pp.arithmetic.leetcode;
2+
3+
import javafx.util.Pair;
4+
import pp.arithmetic.model.TreeNode;
5+
6+
/**
7+
* Created by wangpeng on 2019-09-03.
8+
* 543. 二叉树的直径
9+
*
10+
* 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
11+
*
12+
* 示例 :
13+
* 给定二叉树
14+
*
15+
* 1
16+
* / \
17+
* 2 3
18+
* / \
19+
* 4 5
20+
* 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
21+
*
22+
* 注意:两结点之间的路径长度是以它们之间边的数目表示。
23+
*
24+
* 来源:力扣(LeetCode)
25+
* 链接:https://leetcode-cn.com/problems/diameter-of-binary-tree
26+
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
27+
*/
28+
public class _543_diameterOfBinaryTree {
29+
30+
public static void main(String[] args) {
31+
_543_diameterOfBinaryTree diameterOfBinaryTree = new _543_diameterOfBinaryTree();
32+
TreeNode root = new TreeNode(1);
33+
root.left = new TreeNode(2);
34+
root.right = new TreeNode(3);
35+
root.left.left = new TreeNode(4);
36+
root.left.right = new TreeNode(5);
37+
38+
System.out.println(diameterOfBinaryTree.diameterOfBinaryTree(root));
39+
40+
}
41+
42+
private int ret = 0;
43+
44+
/**
45+
* 解题思路:
46+
* 对于树的问题,正常思路就是遍历,此题也不例外
47+
* 如题所示,找到最长的路径,有两种可能:
48+
* 一、根节点+左右子树节点
49+
* 二、根节点+最长的子树节点作为其父节点的子节点
50+
* 递归遍历过程中,用一个全局变量保存遍历过程中的最大值
51+
*
52+
* @param root
53+
* @return
54+
*/
55+
public int diameterOfBinaryTree(TreeNode root) {
56+
dfs(root);
57+
return ret;
58+
}
59+
60+
private int dfs(TreeNode root) {
61+
if (root == null) return 0;
62+
int left = dfs(root.left);
63+
int right = dfs(root.right);
64+
int count = left + right;
65+
ret = Math.max(ret, count);
66+
return Math.max(left, right) + 1;
67+
}
68+
}

0 commit comments

Comments
 (0)