Leecode #662. 二叉树最大宽度

少于 1 分钟读完

给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。

每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。

示例 1:

输入:

       1
     /   \
    3     2
   / \     \  
  5   3     9 

输出: 4 解释: 最大值出现在树的第 3 层,宽度为 4 (5,3,null,9)。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def widthOfBinaryTree(self, root: TreeNode) -> int:
        from queue import deque
        stack = deque([(root, 1)])
        width = 1
        while stack:
            width = max(width, stack[-1][1] - stack[0][1] + 1)
            for i in range(len(stack)):
                node, idx = stack.popleft()
                node.left and stack.append((node.left, idx*2-1))
                node.right and stack.append((node.right, idx*2))
                    
        return width

很普通的层次遍历,关键是从父节点记录子节点在下一层的编号,顺便学习了用and代替if语句

分类:

更新时间: