左叶子之和
给定二叉树的根节点 root ,返回所有左叶子之和。
小刘解题
左叶子:如果一个节点没有左右子树,且其父节点只有该节点一个子节点。
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
return dfs(root);
}
public int dfs(TreeNode root){
//定义一个变量,该变量记录的是当前节点的左孩子节点的值
// (以当前节点为根节点不一定只有这个值,可能右子树也会有左叶子节点)
int tempNum=0;
//1、此处为递归函数的退出条件(在二叉树中,只要当前节点为空就可以退出递归,别的条件也可以)
if(root==null){
return 0;
}
//2、开始递归
//返回当前节点左子树的所有左叶子节点的值
int leftNum = dfs(root.left);
//返回当前节点右子树的所有左叶子节点的值
int rightNum = dfs(root.right);
//3、单前节点要做的事情
//如果当前节点有左叶子节点则记录该值
if(root.left!=null&&root.left.left==null&&root.left.right==null){
tempNum=root.left.val;
}
//返回的是以当前节点为根节点的所有左叶子节点的值
return tempNum+leftNum+rightNum;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}