Skip to content

Commit 423202e

Browse files
committed
LC#543, optimal-, diameter of binary tree, O(n) TIME
1 parent 0ea3965 commit 423202e

File tree

1 file changed

+37
-3
lines changed

1 file changed

+37
-3
lines changed

β€ŽLeetcode/easy/DiameterOfBinaryTree543.javaβ€Ž

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class TreeNode {
2222

2323
int ans = 0;
2424

25+
// approach 1
2526
public int diameterOfBinaryTree1(TreeNode root) {
2627
if (root == null)
2728
return 0;
@@ -52,6 +53,7 @@ private int height(TreeNode node) {
5253
return Math.max(lheight, rheight);
5354
}
5455

56+
// approach 2
5557
private int height1(TreeNode node) {
5658
if (node == null)
5759
return -1;
@@ -62,13 +64,13 @@ private int height1(TreeNode node) {
6264
return Math.max(lheight, rheight) + 1;
6365
}
6466

65-
public int diameterOfBinaryTree(TreeNode root) {
67+
public int diameterOfBinaryTree2(TreeNode root) {
6668
if (root == null)
6769
return 0;
6870
// max distance between two nodes of LHS
69-
int leftDia = diameterOfBinaryTree(root.left);
71+
int leftDia = diameterOfBinaryTree2(root.left);
7072
// max distance between two nodes of RHS
71-
int rightDia = diameterOfBinaryTree(root.right);
73+
int rightDia = diameterOfBinaryTree2(root.right);
7274

7375
// diameter that passes through the root node
7476
int rootWayDia = height1(root.left) + height1(root.right) + 2;
@@ -78,4 +80,36 @@ public int diameterOfBinaryTree(TreeNode root) {
7880
return dia;
7981
}
8082

83+
// 3rd approach
84+
static class DiaPair {
85+
int pairHeight;
86+
int pairDiameter;
87+
}
88+
89+
public int diameterOfBinaryTree(TreeNode root) {
90+
DiaPair result = diameter(root);
91+
return result.pairDiameter;
92+
}
93+
94+
public DiaPair diameter(TreeNode node) {
95+
if (node == null) {
96+
DiaPair basePair = new DiaPair();
97+
basePair.pairHeight = -1;
98+
basePair.pairDiameter = 0;
99+
return basePair;
100+
}
101+
102+
DiaPair leftPair = diameter(node.left);
103+
DiaPair rightPair = diameter(node.right);
104+
105+
DiaPair mypair = new DiaPair();
106+
107+
mypair.pairHeight = Math.max(leftPair.pairHeight, rightPair.pairHeight) + 1;
108+
109+
// find diameter of mypair
110+
int rootWayDia = leftPair.pairHeight + rightPair.pairHeight + 2;
111+
mypair.pairDiameter = Math.max(rootWayDia, Math.max(leftPair.pairDiameter, rightPair.pairDiameter));
112+
113+
return mypair;
114+
}
81115
}

0 commit comments

Comments
Β (0)