计算给定二叉树的左叶子之和。
树上叶子节点指没有后继节点的节点,左叶子指连向父节点的左侧的叶子节点。
样例 2 解释:
叶子节点有 4 , 5 ,3,左叶子只有 4 ,所以答案返回 4
样例 3 解释
叶子节点有 4 , 5 ,6,左叶子有 4 , 6,所以答案返回 10
数据范围:树上节点的数量满足 ,节点上的值满足
{1,2}
2
{1,2,3,4,5}
4
{1,2,3,4,5,6}
10
/** * #[derive(PartialEq, Eq, Debug, Clone)] * pub struct TreeNode { * pub val: i32, * pub left: Option<Box<TreeNode>>, * pub right: Option<Box<TreeNode>>, * } * * impl TreeNode { * #[inline] * fn new(val: i32) -> Self { * TreeNode { * val: val, * left: None, * right: None, * } * } * } */ struct Solution{ } impl Solution { fn new() -> Self { Solution{} } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型 */ pub fn sumOfLeftLeaves(&self, root: Option<Box<TreeNode>>) -> i32 { // write code here if root.is_none() {0} else { self.left_leave_sum(&root.as_ref().unwrap().left, true) + self.left_leave_sum(&root.as_ref().unwrap().right, false) } } fn left_leave_sum(&self, node: &Option<Box<TreeNode>>, from_left_edge: bool) -> i32 { if node.is_none() {return 0} if node.as_ref().unwrap().left.is_none() && node.as_ref().unwrap().right.is_none() && from_left_edge { node.as_ref().unwrap().val } else { self.left_leave_sum(&node.as_ref().unwrap().left, true) + self.left_leave_sum(&node.as_ref().unwrap().right, false) } } }