summaryrefslogtreecommitdiff
path: root/sum-root-to-leaf-numbers/src
diff options
context:
space:
mode:
Diffstat (limited to 'sum-root-to-leaf-numbers/src')
-rw-r--r--sum-root-to-leaf-numbers/src/main.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/sum-root-to-leaf-numbers/src/main.rs b/sum-root-to-leaf-numbers/src/main.rs
new file mode 100644
index 0000000..57254ce
--- /dev/null
+++ b/sum-root-to-leaf-numbers/src/main.rs
@@ -0,0 +1,40 @@
+// Definition for a binary tree node.
+#[derive(Debug, PartialEq, Eq)]
+pub struct TreeNode {
+ pub val: i32,
+ pub left: Option<Rc<RefCell<TreeNode>>>,
+ pub right: Option<Rc<RefCell<TreeNode>>>,
+}
+
+impl TreeNode {
+ #[inline]
+ pub fn new(val: i32) -> Self {
+ TreeNode {
+ val,
+ left: None,
+ right: None
+ }
+ }
+}
+use std::rc::Rc;
+use std::cell::RefCell;
+
+struct Solution;
+impl Solution {
+ pub fn sum_numbers(root: Option<Rc<RefCell<TreeNode>>>) -> i32 {
+ Solution::sum_numbers_before(root, 0)
+ }
+ pub fn sum_numbers_before(root: Option<Rc<RefCell<TreeNode>>>, before: i32) -> i32 {
+ let Some(node) = root else {return 0;};
+ let n = &node.borrow();
+ let mut sum = 0;
+ if n.left.is_some() {sum += Solution::sum_numbers_before(n.left.clone(), before * 10 + n.val);}
+ if n.right.is_some() {sum += Solution::sum_numbers_before(n.right.clone(), before * 10 + n.val);}
+ sum
+ }
+}
+
+
+fn main() {
+ println!("Hello, world!");
+}