11
11
/// This code:
12
12
///
13
13
/// ```rust
14
- /// use crate::utils::list_node;
14
+ /// use leetcode_trees_rs::utils::list_node;
15
+ ///
15
16
/// let node = list_node!(1, 2, 3, 4);
16
17
/// ```
17
18
///
18
19
/// Is the equivalent of the following:
19
20
///
20
21
/// ```rust
21
- /// use crate::utils::ListNode;
22
+ /// use std::boxed::Box;
23
+ /// use leetcode_trees_rs::utils::ListNode;
24
+ ///
22
25
/// let node = ListNode {
23
26
/// val: 1,
24
- /// next: Some(Box(ListNode {
27
+ /// next: Some(Box::new (ListNode {
25
28
/// val: 2,
26
- /// next: Some(Box(ListNode {
29
+ /// next: Some(Box::new (ListNode {
27
30
/// val: 3,
28
- /// next: ListNode::new(4),
31
+ /// next: Some(Box::new( ListNode::new(4)) ),
29
32
/// }))
30
33
/// }))
31
- /// }
34
+ /// };
32
35
/// ```
33
36
#[ macro_export]
34
37
macro_rules! list_node {
@@ -98,87 +101,76 @@ macro_rules! tree {
98
101
///
99
102
/// ## Example usage
100
103
/// ```rust
101
- /// use crate ::utils::symmetric_tree;
102
- /// symmetric_tree!(1, 2, 3, 4)
104
+ /// use leetcode_trees_rs ::utils::symmetric_tree;
105
+ /// symmetric_tree!(1, 2, 3, 4);
103
106
/// ```
104
107
/// The symmetric_tree! macro invocation is desugared to this:
105
108
/// ```rust
106
- /// use std::rc::Rc;
107
- /// use std::cell::RefCell;
109
+ /// use std::{rc::Rc, cell::RefCell, boxed::Box};
108
110
///
109
- /// use crate ::utils::TreeNode;
111
+ /// use leetcode_trees_rs ::utils::TreeNode;
110
112
///
111
113
/// TreeNode {
112
114
/// val: 1,
113
- /// left: Some(Box ::new(TreeNode {
115
+ /// left: Some(Rc ::new(RefCell::new( TreeNode{
114
116
/// val: 2,
115
- /// left: Some(Box ::new(TreeNode {
117
+ /// left: Some(Rc ::new(RefCell::new( TreeNode{
116
118
/// val: 3,
117
- /// left: Some(Box ::new(TreeNode {
119
+ /// left: Some(Rc ::new(RefCell::new( TreeNode{
118
120
/// val: 4,
119
121
/// left: None,
120
122
/// right: None,
121
- /// }))
122
- /// right: Some(Box ::new(TreeNode {
123
+ /// }))),
124
+ /// right: Some(Rc ::new(RefCell::new( TreeNode{
123
125
/// val: 4,
124
126
/// left: None,
125
127
/// right: None,
126
- /// }))
127
- /// }))
128
- /// right: Some(Box ::new(TreeNode {
128
+ /// }))),
129
+ /// }))),
130
+ /// right: Some(Rc ::new(RefCell::new( TreeNode{
129
131
/// val: 3,
130
- /// left: Some(Box ::new(TreeNode {
132
+ /// left: Some(Rc ::new(RefCell::new( TreeNode{
131
133
/// val: 4,
132
134
/// left: None,
133
135
/// right: None,
134
- /// }))
135
- /// right: Some(Box ::new(TreeNode {
136
+ /// }))),
137
+ /// right: Some(Rc ::new(RefCell::new( TreeNode{
136
138
/// val: 4,
137
139
/// left: None,
138
140
/// right: None,
139
- /// }))
140
- /// }))
141
- /// }))
142
- /// right: Some(Box ::new(TreeNode {
141
+ /// }))),
142
+ /// }))),
143
+ /// }))),
144
+ /// right: Some(Rc ::new(RefCell::new( TreeNode{
143
145
/// val: 2,
144
- /// left: Some(Box ::new(TreeNode {
146
+ /// left: Some(Rc ::new(RefCell::new( TreeNode{
145
147
/// val: 3,
146
- /// left: Some(Box ::new(TreeNode {
148
+ /// left: Some(Rc ::new(RefCell::new( TreeNode{
147
149
/// val: 4,
148
150
/// left: None,
149
151
/// right: None,
150
- /// }))
151
- /// right: Some(Box ::new(TreeNode {
152
+ /// }))),
153
+ /// right: Some(Rc ::new(RefCell::new( TreeNode{
152
154
/// val: 4,
153
155
/// left: None,
154
156
/// right: None,
155
- /// }))
156
- /// }))
157
- /// right: Some(Box ::new(TreeNode {
157
+ /// }))),
158
+ /// }))),
159
+ /// right: Some(Rc ::new(RefCell::new( TreeNode{
158
160
/// val: 3,
159
- /// left: Some(Box ::new(TreeNode {
161
+ /// left: Some(Rc ::new(RefCell::new( TreeNode{
160
162
/// val: 4,
161
163
/// left: None,
162
164
/// right: None,
163
- /// }))
164
- /// right: Some(Box ::new(TreeNode {
165
+ /// }))),
166
+ /// right: Some(Rc ::new(RefCell::new( TreeNode{
165
167
/// val: 4,
166
168
/// left: None,
167
169
/// right: None,
168
- /// }))
169
- /// }))
170
- /// }))
171
- /// }
172
- /// ```
173
- /// I bet you don't want to write that every time.
174
- /// You can have greater control with this too:
175
- /// ```rust
176
- /// use crate::utils::{symmetric_tree, TreeNode};
177
- /// TreeNode {
178
- /// val: 1,
179
- /// left: None,
180
- /// right: Some(Box::new(symmetric_tree!(2, 3, 4)))
181
- /// }
170
+ /// }))),
171
+ /// }))),
172
+ /// }))),
173
+ /// };
182
174
/// ```
183
175
/// Now you have a tree that branches all the way through the right side without having anything on
184
176
/// the left.
@@ -220,7 +212,7 @@ macro_rules! symmetric_tree {
220
212
/// This code:
221
213
///
222
214
/// ```rust
223
- /// use crate ::utils::left_tree;
215
+ /// use leetcode_trees_rs ::utils::left_tree;
224
216
///
225
217
/// let left_only_tree = left_tree!(1, 2, 3);
226
218
/// ```
@@ -229,7 +221,7 @@ macro_rules! symmetric_tree {
229
221
///
230
222
/// ```rust
231
223
/// use std::{rc::Rc, cell::RefCell};
232
- /// use crate ::utils::TreeNode;
224
+ /// use leetcode_trees_rs ::utils::TreeNode;
233
225
///
234
226
/// let left_only_tree = TreeNode {
235
227
/// val: 1,
@@ -239,9 +231,9 @@ macro_rules! symmetric_tree {
239
231
/// val: 3,
240
232
/// left: None,
241
233
/// right: None,
242
- /// })))
234
+ /// }))),
243
235
/// right: None,
244
- /// })))
236
+ /// }))),
245
237
/// right: None,
246
238
/// };
247
239
/// ```
@@ -250,9 +242,9 @@ macro_rules! left_tree {
250
242
( $val: expr) => {
251
243
$crate:: utils:: TreeNode :: new( $val)
252
244
} ;
253
- ( $val: expr, $left: tt) => { {
245
+ ( $val: expr, $( $ left: tt) * ) => { {
254
246
let mut node = $crate:: utils:: TreeNode :: new( $val) ;
255
- node. left = Some ( std:: rc:: Rc :: new( std:: cell:: RefCell :: new( left_tree!( $left) ) ) ) ;
247
+ node. left = Some ( std:: rc:: Rc :: new( std:: cell:: RefCell :: new( left_tree!( $( $ left) * ) ) ) ) ;
256
248
node
257
249
} } ;
258
250
}
@@ -276,7 +268,7 @@ macro_rules! left_tree {
276
268
/// This code:
277
269
///
278
270
/// ```rust
279
- /// use crate ::utils::right_tree;
271
+ /// use leetcode_trees_rs ::utils::right_tree;
280
272
///
281
273
/// let right_only_tree = right_tree!(1, 2, 3);
282
274
/// ```
@@ -285,7 +277,7 @@ macro_rules! left_tree {
285
277
///
286
278
/// ```rust
287
279
/// use std::{rc::Rc, cell::RefCell};
288
- /// use crate ::utils::TreeNode;
280
+ /// use leetcode_trees_rs ::utils::TreeNode;
289
281
///
290
282
/// let right_only_tree = TreeNode {
291
283
/// val: 1,
@@ -306,10 +298,10 @@ macro_rules! right_tree {
306
298
( $val: expr) => {
307
299
$crate:: utils:: TreeNode :: new( $val)
308
300
} ;
309
- ( $val: expr, $right: tt) => { {
301
+ ( $val: expr, $( $ right: tt) * ) => { {
310
302
let mut node = $crate:: utils:: TreeNode :: new( $val) ;
311
303
node. right = Some ( std:: rc:: Rc :: new( std:: cell:: RefCell :: new( right_tree!(
312
- $right
304
+ $( $ right) *
313
305
) ) ) ) ;
314
306
node
315
307
} } ;
0 commit comments