// 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::cell::RefCell; use std::rc::Rc; impl Solution { fn dfs(root: &Option<Rc<RefCell<TreeNode>>>, res: &mut i32) -> i32 { if root.is_none() { return 0; } let node = root.as_ref().unwrap().borrow(); let left = (0).max(Self::dfs(&node.left, res)); let right = (0).max(Self::dfs(&node.right, res)); *res = (node.val + left + right).max(*res); node.val + left.max(right) } pub fn max_path_sum(root: Option<Rc<RefCell<TreeNode>>>) -> i32 { let mut res = -1000; Self::dfs(&root, &mut res); res } }