leetcode-513

73 阅读1分钟

题目描述:具体描述见原题,简单来说就是找到二叉树最后一层最左边节点。

解题思路:这道题可以用BFS,也可以用DFS,但是我现在在看BFS相关的题目,所以用BFS解题。如果想偷懒,那么这道题还是可以用leetcode-102的思路稍微改动一下,返回值返回二维数组最后一个数组中第一个值就可以了,但是这种方法内存开销稍大。因此可以不记录全部层节点,只记录当前操作层下一层节点,如果下一层节点为空,那么就代表遍历到了最后一层,返回本层第一个节点即可。具体过程见代码。

具体代码:

func findBottomLeftValue(root *TreeNode) int {
	queue := make([]*TreeNode, 0)
	queue = append(queue, root)
	for len(queue) != 0 {
		temp := make([]*TreeNode, 0)
		for _, q := range queue{ // 记录下一层全部节点
			if q.Left != nil {
				temp = append(temp, q.Left)
			}
			if q.Right != nil {
				temp = append(temp, q.Right)
			}
		}
		if len(temp) == 0 { // 如果下一层节点为空,那么直接返回本层第一个节点值
			return queue[0].Val
		}
		queue = temp // 给当前层赋值
	}
	return 0
}

补充说明:无。