给定一个二叉树,在树的最后一行找到最左边的值。
示例 1:
示例 2:
解题思路:使用广度优先遍历,因为题目要求寻找的是最底层的最左边的节点。因此我们维护一个变量——节点所在的树的高度,设根节点的高度为0,每往下一层则节点的高度加一。
使用队列,队列中的元素是[节点的索引,节点的高度],这样在遍历队列的时候,当遍历到的节点的所在的高度比前面节点的高度高时,则更新题目所需要求的最底层最左边的节点的值。
具体代码如下:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def findBottomLeftValue(self, root: TreeNode) -> int:
if not root:
return None
queue = collections.deque() # 创建一个队列
queue.append([root,0]) # 将[根节点,根节点的高度]放进队列中
d = -1 # 当前遍历到的节点的高度
nums = 0 # 用于存储最底层最左边的节点的值
while queue: # 遍历队列
roots,index = queue.popleft() # 获得当前队列的节点的索引和节点所在的层数
if index > d: # 如果当前节点的层数大于之前的节点的层数
d = index # 对最高层数进行更新
nums = roots.val # 同时更新最底层最左边的值
if roots.left: # 对下一层子树放进队列中
queue.append([roots.left,index+1])
if roots.right:
queue.append([roots.right,index+1])
return nums