summaryrefslogtreecommitdiff
path: root/sum-root-to-leaf-numbers
diff options
context:
space:
mode:
Diffstat (limited to 'sum-root-to-leaf-numbers')
-rw-r--r--sum-root-to-leaf-numbers/Cargo.toml8
-rw-r--r--sum-root-to-leaf-numbers/src/main.rs40
2 files changed, 48 insertions, 0 deletions
diff --git a/sum-root-to-leaf-numbers/Cargo.toml b/sum-root-to-leaf-numbers/Cargo.toml
new file mode 100644
index 0000000..5d43227
--- /dev/null
+++ b/sum-root-to-leaf-numbers/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "sum-root-to-leaf-numbers"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
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!");
+}