chapter-four/0500~0599/0513.Find-Bottom-Left-Tree-Value
513. 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 均可解题。
代码
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 }