@@ -84,7 +84,7 @@ Notice that nodes 5, 3 and 2 contain the deepest nodes in the tree but node 2 is
84
84
class Solution :
85
85
def subtreeWithAllDeepest (self , root : TreeNode) -> TreeNode:
86
86
def dfs (root ):
87
- if not root:
87
+ if root is None :
88
88
return None , 0
89
89
l, d1 = dfs(root.left)
90
90
r, d2 = dfs(root.right)
@@ -117,23 +117,23 @@ class Solution:
117
117
*/
118
118
class Solution {
119
119
public TreeNode subtreeWithAllDeepest (TreeNode root ) {
120
- return dfs(root)[ 0 ] ;
120
+ return dfs(root). getKey() ;
121
121
}
122
122
123
- private TreeNode [] dfs (TreeNode root ) {
123
+ private Pair< TreeNode , Integer > dfs (TreeNode root ) {
124
124
if (root == null ) {
125
- return new TreeNode []{ null , new TreeNode ( 0 )} ;
125
+ return new Pair<> ( null , 0 ) ;
126
126
}
127
- TreeNode [] left = dfs(root. left);
128
- TreeNode [] right = dfs(root. right);
129
- int d1 = left[ 1 ] . val , d2 = right[ 1 ] . val ;
127
+ Pair< TreeNode , Integer > l = dfs(root. left);
128
+ Pair< TreeNode , Integer > r = dfs(root. right);
129
+ int d1 = l . getValue() , d2 = r . getValue() ;
130
130
if (d1 > d2) {
131
- return new TreeNode []{left[ 0 ], new TreeNode ( d1 + 1 )} ;
131
+ return new Pair<> (l . getKey(), d1 + 1 );
132
132
}
133
133
if (d1 < d2) {
134
- return new TreeNode []{right[ 0 ], new TreeNode ( d2 + 1 )} ;
134
+ return new Pair<> (r . getKey(), d2 + 1 );
135
135
}
136
- return new TreeNode []{ root, new TreeNode ( d1 + 1 )} ;
136
+ return new Pair<> ( root, d1 + 1 );
137
137
}
138
138
}
139
139
```
@@ -152,19 +152,20 @@ class Solution {
152
152
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
153
153
* };
154
154
*/
155
+ using pti = pair<TreeNode*, int >;
155
156
class Solution {
156
157
public:
157
158
TreeNode* subtreeWithAllDeepest(TreeNode* root) {
158
159
return dfs(root).first;
159
160
}
160
161
161
- pair<TreeNode*, int> dfs(TreeNode* root) {
162
+ pti dfs(TreeNode* root) {
162
163
if (!root) return {nullptr, 0};
163
- auto left = dfs(root->left);
164
- auto right = dfs(root->right);
165
- int d1 = left .second, d2 = right .second;
166
- if (d1 > d2) return {left .first, d1 + 1};
167
- if (d1 < d2) return {right .first, d2 + 1};
164
+ pti l = dfs(root->left);
165
+ pti r = dfs(root->right);
166
+ int d1 = l .second, d2 = r .second;
167
+ if (d1 > d2) return {l .first, d1 + 1};
168
+ if (d1 < d2) return {r .first, d2 + 1};
168
169
return {root, d1 + 1};
169
170
}
170
171
};
@@ -181,30 +182,28 @@ public:
181
182
* Right *TreeNode
182
183
* }
183
184
*/
184
- type Result struct {
185
- Node *TreeNode
186
- Depth int
185
+ type pair struct {
186
+ first *TreeNode
187
+ second int
187
188
}
188
189
189
190
func subtreeWithAllDeepest (root *TreeNode ) *TreeNode {
190
- return dfs (root).Node
191
- }
192
-
193
- func dfs (root *TreeNode ) Result {
194
- if root == nil {
195
- return Result{
196
- nil , 0 ,
191
+ var dfs func (root *TreeNode) pair
192
+ dfs = func (root *TreeNode) pair {
193
+ if root == nil {
194
+ return pair{nil , 0 }
197
195
}
196
+ l , r := dfs (root.Left ), dfs (root.Right )
197
+ d1 , d2 := l.second , r.second
198
+ if d1 > d2 {
199
+ return pair{l.first , d1 + 1 }
200
+ }
201
+ if d1 < d2 {
202
+ return pair{r.first , d2 + 1 }
203
+ }
204
+ return pair{root, d1 + 1 }
198
205
}
199
- left , right := dfs (root.Left ), dfs (root.Right )
200
- d1 , d2 := left.Depth , right.Depth
201
- if d1 > d2 {
202
- return Result{left.Node , d1 + 1 }
203
- }
204
- if d1 < d2 {
205
- return Result{right.Node , d2 + 1 }
206
- }
207
- return Result{root, d1 + 1 }
206
+ return dfs (root).first
208
207
}
209
208
```
210
209
0 commit comments