【二叉树】leetcode662.二叉树最大宽度

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

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

思路:
为树的每个节点进行编号,根节点从1开始编号
若当前节点的编号为i,则其左孩子节点的编号为2i,其右孩子节点的编号为2i+1
对二叉树进行层序遍历,更新res=max(res,每层最后一个节点的编号-每层第一个节点的编号+1)

解答:

# 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: Optional[TreeNode]) -> int:
        #编号,当前节点i,左孩子2*i,右孩子2*i+1
        #BFS
        if not root:
            return 0
        q=[(root,1)]
        res=1
        while q:
            n=len(q)
            for i in range(n):
                cur,idx=q.pop(0)
                if i==0:
                    tmp=idx
                if i==n-1:
                    res=max(res,idx-tmp+1)
                if cur.left:
                    q.append((cur.left,2*idx))
                if cur.right:
                    q.append((cur.right,2*idx+1))                          
        return res
上一篇:Wireshark的ping操作以及使用


下一篇:【LeetCode】90. 子集 II(错题2刷)