- 左叶子之和
计算给定二叉树的所有左叶子之和。
方法一:递归
第一种写法:
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if(root==null)
return 0;
else
{
if(root.left!=null&&root.left.left==null&&root.left.right==null)
return root.left.val+sumOfLeftLeaves(root.left)+sumOfLeftLeaves(root.right);
return sumOfLeftLeaves(root.left)+sumOfLeftLeaves(root.right);
}
}
}
第二种写法:
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
return getSum(root,false);
}
public int getSum(TreeNode root,boolean isLeft)
{
if(root==null)
return 0;
if(isLeft&&root.left==null&&root.right==null)
return root.val+getSum(root.left,true)+getSum(root.right,false);
return getSum(root.left,true)+getSum(root.right,false);
}
}
方法二:迭代
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
int sum=0;
Stack<TreeNode> st=new Stack<>();
if(root==null)
return 0;
st.push(root);
while(!st.isEmpty())
{
TreeNode r=st.pop();
if(r.left!=null&&r.left.left==null&&r.left.right==null)
sum+=r.left.val;
if(r.left!=null)
st.push(r.left);
if(r.right!=null)
st.push(r.right);
}
return sum;
}
}