二叉树

难度简单

题目描述

image.png

解题思路

本题要求,求所有树的左叶子节点,这里抓关键字,一定要是左孩子并且是叶子节点
如何判断叶子节点很简单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

  1. class TreeNode {
  2. int val;
  3. TreeNode left;
  4. TreeNode right;
  5. TreeNode(int x) {
  6. val = x;
  7. }
  8. }
  9. public int sumOfLeftLeaves(TreeNode root) {
  10. return sumOfLeftLeaves(root, false);
  11. }
  12. public int sumOfLeftLeaves(TreeNode root, boolean flag) {
  13. if (root == null) {
  14. return 0;
  15. }
  16. if (flag && root.left == null && root.right == null) {
  17. return root.val;
  18. }
  19. int leftSum = sumOfLeftLeaves(root.left, true);
  20. int rightSum = sumOfLeftLeaves(root.right, false);
  21. return leftSum + rightSum;
  22. }