-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQ543DiameterofBinaryTree.java
More file actions
52 lines (43 loc) · 1.42 KB
/
Q543DiameterofBinaryTree.java
File metadata and controls
52 lines (43 loc) · 1.42 KB
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import util.TreeNode;
/**
* @author ahscuml
* @date 2018/11/26
* @time 19:52
*/
// TODO: 2018/11/26 对于递归的理解,这个问题深刻
public class Q543DiameterofBinaryTree {
static int max = 0;
/**
* 测试函数
*/
public static void main(String[] args) {
TreeNode treeNode1 = new TreeNode(1);
TreeNode treeNode2 = new TreeNode(2);
TreeNode treeNode3 = new TreeNode(3);
TreeNode treeNode4 = new TreeNode(4);
TreeNode treeNode5 = new TreeNode(5);
treeNode1.left = treeNode2;
treeNode1.right = treeNode3;
treeNode2.left = treeNode4;
treeNode2.right = treeNode5;
System.out.println(diameterOfBinaryTree(treeNode1));
}
/**
* 我的简单的想法是遍历这个树,然后计算每一个节点的左子树长度加上右子树长度
* 计算长度的方法就是计算树的深度的方法
* <p>
* 但是这样子的时间复杂度会比较长因为我做了很多无效的循环
*/
public static int diameterOfBinaryTree(TreeNode root) {
maxDepth(root);
return max;
}
private static int maxDepth(TreeNode root) {
if (root == null) return 0;
int left = maxDepth(root.left);
int right = maxDepth(root.right);
max = Math.max(max, left + right);
// 递归的精髓,每加一层就加一
return Math.max(left, right) + 1;
}
}