二叉树
难度简单
题目描述
解题思路
本题要求,求所有树的左叶子节点,这里抓关键字,一定要是左孩子并且是叶子节点
如何判断叶子节点很简单root.left == null && root.right == null
那么如何判断是左孩子呢?
这里我使用一个标志位判断叶子节点
具体是这样的写的
当你写递归函数的时候是不是递归左孩子sumOfLeftLeaves(root.left);
递归右孩子sumOfLeftLeaves(root.right);
这里就非常明显了,递归左孩子是不是说明这个节点一定是左孩子
我们就可以将代码这样改写sumOfLeftLeaves(root.left, true);,sumOfLeftLeaves(root.right, false);
作者:ha-ha-ha-192
链接:https://leetcode-cn.com/problems/sum-of-left-leaves/solution/javadi-gui-shi-yong-biao-zhi-wei-qiu-he-by-ha-ha-h/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Code
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public int sumOfLeftLeaves(TreeNode root) {
return sumOfLeftLeaves(root, false);
}
public int sumOfLeftLeaves(TreeNode root, boolean flag) {
if (root == null) {
return 0;
}
if (flag && root.left == null && root.right == null) {
return root.val;
}
int leftSum = sumOfLeftLeaves(root.left, true);
int rightSum = sumOfLeftLeaves(root.right, false);
return leftSum + rightSum;
}