Leetcode404. 左叶子之和
题目:
计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
题解:
递归和迭代
scala代码:
/**
* 迭代
*
* @param root
* @return
*/
def sumOfLeftLeaves(root: TreeNode): Int = {
if (root == null) {
0
} else {
var sum = 0
val stack = new util.LinkedList[(TreeNode, Boolean)]()
stack.push((root, false))
while (!stack.isEmpty) {
val tuple = stack.poll()
val node = tuple._1
val flag = tuple._2
if (flag && node.left == null && node.right == null) {
sum = sum + node.value
}
if (node.left != null) {
stack.add((node.left, true))
}
if (node.right != null) {
stack.add((node.right, false))
}
}
sum
}
}
/**
* 递归
*
* @param root
* @return
*/
def sumOfLeftLeaves2(root: TreeNode): Int = {
if (root == null) {
0
} else {
var sum = 0
if (isLeftLeave(root.left)) {
sum = sum + root.left.value
} else {
sum = sum + sumOfLeftLeaves2(root.left)
}
sum = sum + sumOfLeftLeaves2(root.right)
sum
}
}
/**
* 判断是否是叶子节点
* @param treeNode
* @return
*/
def isLeftLeave(treeNode: TreeNode): Boolean = {
treeNode != null && (treeNode.left == null && treeNode.right == null);
}