impl Solution {
    pub fn trim_bst(
        root: Option<Rc<RefCell<TreeNode>>>,
        l: i32,
        r: i32,
    ) -> Option<Rc<RefCell<TreeNode>>> {
        Self::h(&root, l, r)
    }
    fn h(
      t: &Option<Rc<RefCell<TreeNode>>>, 
      l: i32, 
      r: i32
    ) -> Option<Rc<RefCell<TreeNode>>> {
        if let Some(t) = t {
            let mut n = t.borrow_mut();
            if n.val < l {
                return Self::h(&n.right, l, r);
            }
            if n.val > r {
                return Self::h(&n.left, l, r);
            }
            n.left = Self::h(&n.left, l, r);
            n.right = Self::h(&n.right, l, r);
            // What if not cloning.
            Some(t.clone())
        } else {
            None
        }
    }
}
贴一下 playground
	    
	    
		1
	    
	    
	    共 7 条评论, 1 页
	
	
    
评论区
写评论服了,大佬们,刷了几天 leetcode,我现在开始怀疑我以前写的都是假 Rust LOL 对以下内容的回复:
写了一个不用返回的,另外用
drop也可以达到大括号的效果。playground
对以下内容的回复:
我认为还是用unsafe吧, 把所有权交给树而不是交给节点
有没有啥办法能够不返回
Option<Rc<RefCell<TreeNode>>>,直接进行 trim?太骚了,这个花括号
t是个Rc,复制它并不会把整棵树复制一遍,开销并不大,没有必要避免。真的不想用
clone的话,可以这样:unsafe