左叶子之和
左叶子之和
一、题目描述
给定一个二叉树根节点,返回所有左叶子之和。
示例1

输入: root = [3,9,20,null,null,15,7]
输出: 24
示例2
输入: root = [1]
输出: 0
二、解题思路
采用递归遍历每一个叶子节点,并相加左叶子节点即可。
三、解题方法
方法1(前序遍历)
将二叉树前序遍历,遇到左叶子节点就累加,即可。
代码实现:
class Solution {
int res = 0;
public int sumOfLeftLeaves(TreeNode root) {
def(root,false);
return res;
}
public void def(TreeNode node,boolean isLeft){
if(node == null){
return;
}
if(node.left == null && node.right == null && isLeft){
res += node.val;
}
def(node.left,true);
def(node.right,false);
}
}
方法二(深度优先)
代码实现:
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
return dfs(root);
}
public int dfs(TreeNode root){
int res = 0;
if(root.left != null){
res += isLeftNode(root.left) ? root.left.val: dfs(root.left);
}
if(root.right != null && !isLeftNode(root.right)){
res += dfs(root.right);
}
return res;
}
public boolean isLeftNode(TreeNode node){
return node!=null && node.left==null && node.right==null;
}
}
浙公网安备 33010602011771号