// 513.找树左下角的值
package main
import (
"container/list"
"fmt"
)
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func findBottomLeftValue(root *TreeNode) int {
res := [][]int{}
que := list.New()
que.PushBack(root)
for que.Len() > 0 {
length := que.Len()
res_row := []int{}
for length > 0 {
val := que.Remove(que.Front()).(*TreeNode)
res_row = append(res_row, val.Val)
if val.Left != nil {
que.PushBack(val.Left)
}
if val.Right != nil {
que.PushBack(val.Right)
}
length--
}
res = append(res, res_row)
}
v := res[len(res)-1]
return v[0]
}
func main() {
//k=3
node1, node2, node3, node4 := TreeNode{1, nil, nil}, TreeNode{2, nil, nil}, TreeNode{7, nil, nil}, TreeNode{8, nil, nil}
//k=2
node5, node6 := TreeNode{4, &node1, &node2}, TreeNode{6, &node3, &node4}
//k=1
node7 := TreeNode{5, &node5, &node6}
res := findBottomLeftValue(&node7)
fmt.Printf("res: %v\n", res) //res: 1
}
//112. 路径总和
package main
import "fmt"
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func hasPathSum(root *TreeNode, targetSum int) bool {
// 终止条件:遍历到叶子结点
if root == nil {
return false
}
targetSum -= root.Val //减去当前根结点的值
if root.Left == nil && root.Right == nil && targetSum == 0 {
return true
}
if root.Left == nil && root.Right == nil && targetSum != 0 {
return false
}
//继续寻找左右子树
return hasPathSum(root.Left, targetSum) || hasPathSum(root.Right, targetSum)
}
func main() {
//k=3
node1, node2, node3, node4 := TreeNode{1, nil, nil}, TreeNode{2, nil, nil}, TreeNode{7, nil, nil}, TreeNode{8, nil, nil}
//k=2
node5, node6 := TreeNode{4, &node1, &node2}, TreeNode{6, &node3, &node4}
//k=1
node7 := TreeNode{5, &node5, &node6}
res := hasPathSum(&node7, 18)
fmt.Printf("res: %v\n", res) //res: true
}