mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-08-02 02:17:53 +08:00
112 lines
1.9 KiB
Markdown
Executable File
112 lines
1.9 KiB
Markdown
Executable File
# [513. Find Bottom Left Tree Value](https://leetcode.com/problems/find-bottom-left-tree-value/)
|
||
|
||
|
||
## 题目
|
||
|
||
Given a binary tree, find the leftmost value in the last row of the tree.
|
||
|
||
**Example 1**:
|
||
|
||
Input:
|
||
|
||
2
|
||
/ \
|
||
1 3
|
||
|
||
Output:
|
||
1
|
||
|
||
**Example 2**:
|
||
|
||
Input:
|
||
|
||
1
|
||
/ \
|
||
2 3
|
||
/ / \
|
||
4 5 6
|
||
/
|
||
7
|
||
|
||
Output:
|
||
7
|
||
|
||
**Note**: You may assume the tree (i.e., the given root node) is not **NULL**.
|
||
|
||
|
||
## 题目大意
|
||
|
||
给定一个二叉树,在树的最后一行找到最左边的值。注意: 您可以假设树(即给定的根节点)不为 NULL。
|
||
|
||
|
||
|
||
|
||
|
||
|
||
## 解题思路
|
||
|
||
|
||
- 给出一棵树,输出这棵树最下一层中最左边的节点的值。
|
||
- 这一题用 DFS 和 BFS 均可解题。
|
||
|
||
|
||
## 代码
|
||
|
||
```go
|
||
|
||
package leetcode
|
||
|
||
/**
|
||
* Definition for a binary tree node.
|
||
* type TreeNode struct {
|
||
* Val int
|
||
* Left *TreeNode
|
||
* Right *TreeNode
|
||
* }
|
||
*/
|
||
|
||
// 解法一 DFS
|
||
func findBottomLeftValue(root *TreeNode) int {
|
||
if root == nil {
|
||
return 0
|
||
}
|
||
res, maxHeight := 0, -1
|
||
findBottomLeftValueDFS(root, 0, &res, &maxHeight)
|
||
return res
|
||
}
|
||
|
||
func findBottomLeftValueDFS(root *TreeNode, curHeight int, res, maxHeight *int) {
|
||
if curHeight > *maxHeight && root.Left == nil && root.Right == nil {
|
||
*maxHeight = curHeight
|
||
*res = root.Val
|
||
}
|
||
if root.Left != nil {
|
||
findBottomLeftValueDFS(root.Left, curHeight+1, res, maxHeight)
|
||
}
|
||
if root.Right != nil {
|
||
findBottomLeftValueDFS(root.Right, curHeight+1, res, maxHeight)
|
||
}
|
||
}
|
||
|
||
// 解法二 BFS
|
||
func findBottomLeftValue1(root *TreeNode) int {
|
||
queue := []*TreeNode{root}
|
||
for len(queue) > 0 {
|
||
next := []*TreeNode{}
|
||
for _, node := range queue {
|
||
if node.Left != nil {
|
||
next = append(next, node.Left)
|
||
}
|
||
if node.Right != nil {
|
||
next = append(next, node.Right)
|
||
}
|
||
}
|
||
if len(next) == 0 {
|
||
return queue[0].Val
|
||
}
|
||
queue = next
|
||
}
|
||
return 0
|
||
}
|
||
|
||
``` |