rustgym/leetcode/
_538_convert_bst_to_greater_tree.rs

1struct 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}