leetcode —— 513. 找树左下角的值

给定一个二叉树,在树的最后一行找到最左边的值。

示例 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
发布了320 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37388085/article/details/105203214