rustgym/leetcode/
_538_convert_bst_to_greater_tree.rs1struct Solution;
2use rustgym_util::*;
3
4trait Inorder {
5 fn inorder(&mut self, sum: &mut i32);
6}
7
8impl Inorder for TreeLink {
9 fn inorder(&mut self, sum: &mut i32) {
10 if let Some(node) = self {
11 let mut node = node.borrow_mut();
12 node.right.inorder(sum);
13 *sum += node.val;
14 node.val = *sum;
15 node.left.inorder(sum);
16 }
17 }
18}
19
20impl Solution {
21 fn convert_bst(mut root: TreeLink) -> TreeLink {
22 let mut sum = 0;
23 root.inorder(&mut sum);
24 root
25 }
26}
27
28#[test]
29fn test() {
30 let root = tree!(5, tree!(2), tree!(13));
31 let greater = tree!(18, tree!(20), tree!(13));
32 assert_eq!(Solution::convert_bst(root), greater);
33}