leetcode(88).404. Sum of Left Leaves

来源:互联网 发布:复旦物理系 知乎 编辑:程序博客网 时间:2024/05/11 21:14

题意:

给定一棵二叉树,返回所有左叶子值的和。

初步分析:
递归:除了节点以外还需要传递和的信息,后来还发现还需要传递判断是不是左结点的信息。

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {     public int sumOfLeftLeaves(TreeNode root) {        return sumOfLeftTreeNodes(0, root, false);    }        public int sumOfLeftTreeNodes(int sum, TreeNode root,boolean left){        if(root==null)             return sum;                if(root.left==null && root.right==null && left)  //是左叶子的处理            return sum + root.val;         else                                            //不是左叶子就是左子树加右子树加已经有的            return sum + sumOfLeftTreeNodes(sum, root.left, true) + sumOfLeftTreeNodes(sum, root.right, false);    }}

左子树可以直接判断,sum也可以在函数内定义和使用。所以,也可以直接递归sumOfLeftLeaves

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {     public int sumOfLeftLeaves(TreeNode root) {        if(root == null)             return 0;        int sum = 0;        if(root.left!=null && root.left.left == null && root.left.right == null)  //左叶子结点        {            sum = root.left.val;        }        return sum + sumOfLeftLeaves(root.right) + sumOfLeftLeaves(root.left); //递归表达式    }}


这一段是讨论区的代码,挺喜欢这种风格

public int sumOfLeftLeaves(TreeNode root) {        if (root == null) return 0;        int sum = 0;        if (root.left != null && root.left.left == null && root.left.right == null)  sum += root.left.val;        sum += sumOfLeftLeaves(root.left);        sum += sumOfLeftLeaves(root.right);        return sum;}



0 0
原创粉丝点击