LeetCode 404. 左叶子之和
题目链接:LeetCode 404. 左叶子之和
题意:
给定二叉树的根节点 root ,返回所有左叶子之和。
解题思路:
首先要明确左叶子的定义:节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点。
由定义可以看出,判断当前节点是不是左叶子是无法判断的,必须要通过节点的父节点来判断其左孩子是不是左叶子。
如果该节点的左节点不为空,该节点的左节点的左节点为空,该节点的左节点的右节点为空,则找到了一个左叶子,然后加入到结果集中即可
递归法
递归代码:
var res int
func sumOfLeftLeaves(root *TreeNode) int {
res = 0
dfs(root)
return res
}
func dfs(root *TreeNode){
if root == nil {
return
}
if root.Left != nil && root.Left.Left == nil && root.Left.Right == nil{
res += root.Left.Val
}
dfs(root.Left)
dfs(root.Right)
}
迭代法代码:
// 迭代法
func sumOfLeftLeaves(root *TreeNode) int {
var res int
var stk []*TreeNode
for root != nil || len(stk) != 0 {
for root != nil {
if root.Left != nil && root.Left.Left == nil && root.Left.Right == nil{
res += root.Left.Val
}
stk = append(stk,root)
root = root.Left
}
root = stk[len(stk)-1]
stk = stk[:len(stk)-1]
root = root.Right
}
return res
}