leetCode的实现如下:
pub struct TreeNode {
pub val: i32,
pub left: Option<Rc<RefCell<TreeNode>>>,
pub right: Option<Rc<RefCell<TreeNode>>>,
}
我个人认为的实现:
pub struct TreeNode {
pub val: i32,
pub left: Option<Box<TreeNode>>,
pub right: Option<Box<TreeNode>>,
}
难道和编译时和运行时有关吗,下面是官方书籍的相关描述: Box 允许在编译时执行不可变或可变借用检查;Rc仅允许在编译时执行不可变借用检查;RefCell 允许在运行时执行不可变或可变借用检查。
1
共 8 条评论, 1 页
评论区
写评论这些举的例子我在做题的过程中真的是深有体会,这下我终于不用怀疑自己了,哈哈
--
👇
LgnMs: 感谢,正解啊,我还以为是我学的有问题,昨天反复试验了一上午,哈哈
--
👇
Grobycn: 因为 leetcode 的题目大多数都是机器生成的,不符合 rust 的语言习惯的地方太多了。
参考 https://github.com/pretzelhammer/rust-blog/blob/master/posts/learning-rust-in-2020.md#leetcode
感谢,正解啊,我还以为是我学的有问题,昨天反复试验了一上午,哈哈
--
👇
Grobycn: 因为 leetcode 的题目大多数都是机器生成的,不符合 rust 的语言习惯的地方太多了。
参考 https://github.com/pretzelhammer/rust-blog/blob/master/posts/learning-rust-in-2020.md#leetcode
是的,我清楚这个区别,但是这个二叉树貌似也用不到多所有权和内部可变吧
--
👇
苦瓜小仔: 因为 Box 做不到多所有权或者内部可变,它只是最基础的智能指针。
我就是试了,发现把Rc、RefCell部分换成Box也完全可行。。。
--
👇
cyh0: 试一下,编译器会告诉你行不行的。
因为 leetcode 的题目大多数都是机器生成的,不符合 rust 的语言习惯的地方太多了。
参考 https://github.com/pretzelhammer/rust-blog/blob/master/posts/learning-rust-in-2020.md#leetcode
因为 Box 做不到多所有权或者内部可变,它只是最基础的智能指针。
试一下,编译器会告诉你行不行的。
The type Rc provides shared ownership of a value of type T