1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| struct Solution;
#[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::cell::RefCell; use std::rc::Rc; impl Solution { pub fn has_path_sum(root: Option<Rc<RefCell<TreeNode>>>, target_sum: i32) -> bool { let mut stack = Vec::new();
if let Some(p) = root { stack.push((p, 0)); } else { return false; }
while let Some((node, val)) = stack.pop() { let node_ref = node.borrow(); let curr_sum = node_ref.val + val; if node_ref.left.is_none() && node_ref.right.is_none() { if target_sum == curr_sum { return true; } }
if let Some(right) = node_ref.right.clone() { stack.push((right, curr_sum)); } if let Some(left) = node_ref.left.clone() { stack.push((left, curr_sum)); } }
false } } fn main() { println!("Hello, world!"); }
|