Skip to content

Commit 6956ea3

Browse files
committed
feat: add solutions to lcof2 problem: No.054
剑指 Offer II 054. 所有大于等于节点的值之和
1 parent 06d92de commit 6956ea3

File tree

3 files changed

+136
-0
lines changed

3 files changed

+136
-0
lines changed

lcof2/剑指 Offer II 054. 所有大于等于节点的值之和/README.md

+73
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,79 @@ var convertBST = function (root) {
433433
};
434434
```
435435

436+
### **TypeScript**
437+
438+
```ts
439+
/**
440+
* Definition for a binary tree node.
441+
* class TreeNode {
442+
* val: number
443+
* left: TreeNode | null
444+
* right: TreeNode | null
445+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
446+
* this.val = (val===undefined ? 0 : val)
447+
* this.left = (left===undefined ? null : left)
448+
* this.right = (right===undefined ? null : right)
449+
* }
450+
* }
451+
*/
452+
453+
function convertBST(root: TreeNode | null): TreeNode | null {
454+
let sum = 0;
455+
const dfs = (root: TreeNode | null) => {
456+
if (root == null) {
457+
return;
458+
}
459+
dfs(root.right);
460+
root.val += sum;
461+
sum = root.val;
462+
dfs(root.left);
463+
};
464+
dfs(root);
465+
return root;
466+
}
467+
```
468+
469+
### **Rust**
470+
471+
```rust
472+
// Definition for a binary tree node.
473+
// #[derive(Debug, PartialEq, Eq)]
474+
// pub struct TreeNode {
475+
// pub val: i32,
476+
// pub left: Option<Rc<RefCell<TreeNode>>>,
477+
// pub right: Option<Rc<RefCell<TreeNode>>>,
478+
// }
479+
//
480+
// impl TreeNode {
481+
// #[inline]
482+
// pub fn new(val: i32) -> Self {
483+
// TreeNode {
484+
// val,
485+
// left: None,
486+
// right: None
487+
// }
488+
// }
489+
// }
490+
use std::rc::Rc;
491+
use std::cell::RefCell;
492+
impl Solution {
493+
fn dfs(root: &Option<Rc<RefCell<TreeNode>>>, sum: &mut i32) {
494+
if let Some(node) = root {
495+
Self::dfs(&node.borrow().right, sum);
496+
node.borrow_mut().val += *sum;
497+
*sum = node.borrow().val;
498+
Self::dfs(&node.borrow().left, sum);
499+
}
500+
}
501+
502+
pub fn convert_bst(root: Option<Rc<RefCell<TreeNode>>>) -> Option<Rc<RefCell<TreeNode>>> {
503+
Self::dfs(&root, &mut 0);
504+
root
505+
}
506+
}
507+
```
508+
436509
### **...**
437510

438511
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Definition for a binary tree node.
2+
// #[derive(Debug, PartialEq, Eq)]
3+
// pub struct TreeNode {
4+
// pub val: i32,
5+
// pub left: Option<Rc<RefCell<TreeNode>>>,
6+
// pub right: Option<Rc<RefCell<TreeNode>>>,
7+
// }
8+
//
9+
// impl TreeNode {
10+
// #[inline]
11+
// pub fn new(val: i32) -> Self {
12+
// TreeNode {
13+
// val,
14+
// left: None,
15+
// right: None
16+
// }
17+
// }
18+
// }
19+
use std::rc::Rc;
20+
use std::cell::RefCell;
21+
impl Solution {
22+
fn dfs(root: &Option<Rc<RefCell<TreeNode>>>, sum: &mut i32) {
23+
if let Some(node) = root {
24+
Self::dfs(&node.borrow().right, sum);
25+
node.borrow_mut().val += *sum;
26+
*sum = node.borrow().val;
27+
Self::dfs(&node.borrow().left, sum);
28+
}
29+
}
30+
31+
pub fn convert_bst(root: Option<Rc<RefCell<TreeNode>>>) -> Option<Rc<RefCell<TreeNode>>> {
32+
Self::dfs(&root, &mut 0);
33+
root
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
15+
function convertBST(root: TreeNode | null): TreeNode | null {
16+
let sum = 0;
17+
const dfs = (root: TreeNode | null) => {
18+
if (root == null) {
19+
return;
20+
}
21+
dfs(root.right);
22+
root.val += sum;
23+
sum = root.val;
24+
dfs(root.left);
25+
};
26+
dfs(root);
27+
return root;
28+
}

0 commit comments

Comments
 (0)