@@ -293,7 +293,108 @@ func minimumOperations(root *TreeNode) (ans int) {
293
293
### ** TypeScript**
294
294
295
295
``` ts
296
+ /**
297
+ * Definition for a binary tree node.
298
+ * class TreeNode {
299
+ * val: number
300
+ * left: TreeNode | null
301
+ * right: TreeNode | null
302
+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
303
+ * this.val = (val===undefined ? 0 : val)
304
+ * this.left = (left===undefined ? null : left)
305
+ * this.right = (right===undefined ? null : right)
306
+ * }
307
+ * }
308
+ */
296
309
310
+ function minimumOperations(root : TreeNode | null ): number {
311
+ const queue = [root ];
312
+ let ans = 0 ;
313
+ while (queue .length !== 0 ) {
314
+ const n = queue .length ;
315
+ const row: number [] = [];
316
+ for (let i = 0 ; i < n ; i ++ ) {
317
+ const { val, left, right } = queue .shift ();
318
+ row .push (val );
319
+ left && queue .push (left );
320
+ right && queue .push (right );
321
+ }
322
+ for (let i = 0 ; i < n - 1 ; i ++ ) {
323
+ let minIdx = i ;
324
+ for (let j = i + 1 ; j < n ; j ++ ) {
325
+ if (row [j ] < row [minIdx ]) {
326
+ minIdx = j ;
327
+ }
328
+ }
329
+ if (i !== minIdx ) {
330
+ [row [i ], row [minIdx ]] = [row [minIdx ], row [i ]];
331
+ ans ++ ;
332
+ }
333
+ }
334
+ }
335
+ return ans ;
336
+ }
337
+ ```
338
+
339
+ ### ** Rust**
340
+
341
+ ``` rust
342
+ // Definition for a binary tree node.
343
+ // #[derive(Debug, PartialEq, Eq)]
344
+ // pub struct TreeNode {
345
+ // pub val: i32,
346
+ // pub left: Option<Rc<RefCell<TreeNode>>>,
347
+ // pub right: Option<Rc<RefCell<TreeNode>>>,
348
+ // }
349
+ //
350
+ // impl TreeNode {
351
+ // #[inline]
352
+ // pub fn new(val: i32) -> Self {
353
+ // TreeNode {
354
+ // val,
355
+ // left: None,
356
+ // right: None
357
+ // }
358
+ // }
359
+ // }
360
+ use std :: rc :: Rc ;
361
+ use std :: cell :: RefCell ;
362
+ use std :: collections :: VecDeque ;
363
+ impl Solution {
364
+ pub fn minimum_operations (root : Option <Rc <RefCell <TreeNode >>>) -> i32 {
365
+ let mut queue = VecDeque :: new ();
366
+ queue . push_back (root );
367
+ let mut ans = 0 ;
368
+ while ! queue . is_empty () {
369
+ let n = queue . len ();
370
+ let mut row = Vec :: new ();
371
+ for _ in 0 .. n {
372
+ let mut node = queue . pop_front (). unwrap ();
373
+ let mut node = node . as_mut (). unwrap (). borrow_mut ();
374
+ row . push (node . val);
375
+ if node . left. is_some () {
376
+ queue . push_back (node . left. take ());
377
+ }
378
+ if node . right. is_some () {
379
+ queue . push_back (node . right. take ());
380
+ }
381
+ }
382
+ for i in 0 .. n - 1 {
383
+ let mut min_idx = i ;
384
+ for j in i + 1 .. n {
385
+ if row [j ] < row [min_idx ] {
386
+ min_idx = j ;
387
+ }
388
+ }
389
+ if i != min_idx {
390
+ row . swap (i , min_idx );
391
+ ans += 1 ;
392
+ }
393
+ }
394
+ }
395
+ ans
396
+ }
397
+ }
297
398
```
298
399
299
400
### ** ...**
0 commit comments