首页 > 其他分享 >【重要】LeetCode 662. 二叉树最大宽度

【重要】LeetCode 662. 二叉树最大宽度

时间:2022-08-28 00:12:39浏览次数:57  
标签:map 662 节点 depth 宽度 二叉树 编号 root LeetCode

题目链接

注意事项

根据满二叉树的节点编号规则:若根节点编号为 u,则其左子节点编号为 u << 1,其右节点编号为 u << 1 | 1。

一个朴素的想法是:我们在 DFS过程中使用两个哈希表分别记录每层深度中的最小节点编号和最大节点编号,两者距离即是当前层的宽度,最终所有层数中的最大宽度即是答案。

而实现上,我们可以利用先 DFS 左节点,再 DFS 右节点的性质可知,每层的最左节点必然是最先被遍历到,因此我们只需要记录当前层最先被遍历到点编号(即当前层最小节点编号),并在 DFS 过程中计算宽度,更新答案即可。

关于编号溢出问题,之所以溢出仍能 AC 是因为测试数组中没有同层内「宽度」左端点不溢出,右端点溢出,同时该层就是最大宽度的数据点。
我们可以通过 u = u - map.get(depth) + 1 操作来对同层内的节点进行重新编号(使得同层最靠左的非空节点编号为1)。
通过重编号操作 我们可以消除由于深度加深带来的编号溢出问题。

代码

class Solution {
    Map<Integer, Integer> map = new HashMap<>();
    int ans;
    public int widthOfBinaryTree(TreeNode root) {
        dfs(root, 1, 0);
        return ans;
    }
    void dfs(TreeNode root, int u, int depth) {
        if (root == null) return ;
        if (!map.containsKey(depth)) map.put(depth, u);
        ans = Math.max(ans, u - map.get(depth) + 1);
        u = u - map.get(depth) + 1;
        dfs(root.left, u << 1, depth + 1);
        dfs(root.right, u << 1 | 1, depth + 1);
    }
}

标签:map,662,节点,depth,宽度,二叉树,编号,root,LeetCode
From: https://www.cnblogs.com/shixuanliu/p/16631829.html

相关文章

  • 662. 二叉树最大宽度
    662.二叉树最大宽度给你一棵二叉树的根节点root,返回树的最大宽度。树的最大宽度是所有层中最大的宽度。每一层的宽度被定义为该层最左和最右的非空节点......
  • 二叉树
    1树的结构 1.1树的概念:树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。有一个特殊的节点叫根节点,根节点没有前驱。其余节点被分成......
  • leetcode 647. Palindromic Substrings回文子串(中等)
    一、题目大意给你一个字符串s,请你统计并返回这个字符串中回文子串的数目。回文字符串是正着读和倒过来读一样的字符串。子字符串是字符串中的由连续字符组成的一......
  • leetcode139:单词拆分
    packagecom.mxnet;importjava.util.HashSet;importjava.util.List;publicclassSolution139{publicstaticvoidmain(String[]args){}/**......
  • 222.count-complete-tree-nodes 完全二叉树的节点个数
    遍历法遍历所有节点的方法,时间复杂度为\(O(n)\)classSolution{public:intcountNodes(TreeNode*root){if(root==nullptr)return0......
  • LeetCode刷题23-在排序数组中查找元素的第一个和最后一个位置
    importjava.util.Arrays;/***功能描述**@authorASUS*@version1.0*@Date2022/8/27*/publicclassMain06{publicstaticvoidmain(String[]......
  • leetcode169:多数元素
    packagecom.mxnet;importjava.util.HashMap;importjava.util.Set;publicclassSolution169{publicstaticvoidmain(String[]args){}/**......
  • [Oracle] LeetCode 348 Design Tic-Tac-Toe
    Assumethefollowingrulesareforthetic-tac-toegameonannxnboardbetweentwoplayers:Amoveisguaranteedtobevalidandisplacedonanemptybloc......
  • 动态规划——leetcode5、最长回文子串
    1、题目描述:2、解题方法:动态规划动态规划解题步骤:1、确定状态最后一步:如果s[i,...,j]是回文子串,那么需要满足两个条件①s[i......
  • LeetCode 20. 有效的括号
    题目题目链接:https://leetcode.cn/problems/valid-parentheses/给定一个只包括'(',')','{','}','[',']' 的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相......