给定二叉树的根节点 root ,返回所有左叶子之和。
示例 1:
输入: root = [3,9,20,null,null,15,7]
3/ \9 20/ \15 7
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
示例 2:
输入: root = [1]
输出: 0
�
算法需要有个返回结果,递归算法框架(借助辅助函数):
public int sumOfLeftLeaves(TreeNode root) {return sumOfLeftLeaves(root, 0);}public int sumOfLeftLeaves(TreeNode root, int sum) {}
当遍历到某个节点时,此节点需要做什么?
1.若节点为空,结束遍历
2.若节点不为空
2.1)若节点的左子节点和右子节点都为空,节点是根节点,则结束遍历
2.2)若节点的左子节点不为空
2.2.1)若左子节点是叶子节点,则该左子节点是左叶子节点,累加左子节点的值到结果中
2.2.2)若左子节点不是叶子节点,则继续遍历左子节点
2.3)若节点的右子节点不为空
2.3.1)若右子节点是叶子节点,则结束遍历
2.3.2)若右子节点不是叶子节点,则继续遍历右子节点
public int sumOfLeftLeaves(TreeNode root, int sum) {if (root == null) {return sum;}if (root.left == null && root.right == null) {return sum;}if (root.left != null) {if (root.left.left == null && root.left.right == null) {// 左子节点是叶子节点sum = sum + root.left.val;} else {// 左子节点不是叶子节点,继续遍历左子节点sum = sumOfLeftLeaves(root.left, sum);}}if (root.right != null) {if (root.right.left == null && root.right.right == null) {// 右子节点是叶子节点,结束遍历return sum;} else {// 右子节点不是叶子节点,继续遍历右子节点sum = sumOfLeftLeaves(root.right, sum);}}return sum;}
