@@ -22,6 +22,7 @@ public class TreeNode {
22
22
23
23
int ans = 0 ;
24
24
25
+ // approach 1
25
26
public int diameterOfBinaryTree1 (TreeNode root ) {
26
27
if (root == null )
27
28
return 0 ;
@@ -52,6 +53,7 @@ private int height(TreeNode node) {
52
53
return Math .max (lheight , rheight );
53
54
}
54
55
56
+ // approach 2
55
57
private int height1 (TreeNode node ) {
56
58
if (node == null )
57
59
return -1 ;
@@ -62,13 +64,13 @@ private int height1(TreeNode node) {
62
64
return Math .max (lheight , rheight ) + 1 ;
63
65
}
64
66
65
- public int diameterOfBinaryTree (TreeNode root ) {
67
+ public int diameterOfBinaryTree2 (TreeNode root ) {
66
68
if (root == null )
67
69
return 0 ;
68
70
// max distance between two nodes of LHS
69
- int leftDia = diameterOfBinaryTree (root .left );
71
+ int leftDia = diameterOfBinaryTree2 (root .left );
70
72
// max distance between two nodes of RHS
71
- int rightDia = diameterOfBinaryTree (root .right );
73
+ int rightDia = diameterOfBinaryTree2 (root .right );
72
74
73
75
// diameter that passes through the root node
74
76
int rootWayDia = height1 (root .left ) + height1 (root .right ) + 2 ;
@@ -78,4 +80,36 @@ public int diameterOfBinaryTree(TreeNode root) {
78
80
return dia ;
79
81
}
80
82
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
+ }
81
115
}
0 commit comments