1. 题目

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

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

示例 1:
输入: 1/   \3     2/ \     \  5   3     9
输出: 4
解释: 最大值出现在树的第 3 层,宽度为 4 (5,3,null,9)。示例 2:
输入: 1/  3    / \       5   3
输出: 2
解释: 最大值出现在树的第 3 层,宽度为 2 (5,3)。示例 3:
输入: 1/ \3   2 /        5
输出: 2
解释: 最大值出现在树的第 2 层,宽度为 2 (3,2)。示例 4:
输入: 1/ \3   2/     \  5       9 /         \6           7
输出: 8
解释: 最大值出现在树的第 4 层,
宽度为 8 (6,null,null,null,null,null,null,7)。
注意: 答案在32位有符号整数的表示范围内。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-width-of-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 记录深度,和每一层的最左侧节点位置(中序遍历每层第一次碰到的)
  • 节点位置用树的数组实现方式(注意溢出,每层pos*2很快就溢出了,用ulong能过)
class Solution {int ans;
public:int widthOfBinaryTree(TreeNode* root) {if(!root) return 0;vector<unsigned long> LeftPosOflv;ans = 1;dfs(root, 0, 0, LeftPosOflv);return ans;}void dfs(TreeNode* root, int depth, unsigned long pos, vector<unsigned long> &LeftPosOflv){if(!root) return;if(LeftPosOflv.size() <= depth)//第一次遇到的是该层最左边的LeftPosOflv.push_back(pos);ans = max(ans, int(pos-LeftPosOflv[depth]+1));dfs(root->left, depth+1, 2*pos+1, LeftPosOflv);dfs(root->right, depth+1, 2*pos+2, LeftPosOflv);}
};

12 ms 16.3 MB

LeetCode 662. 二叉树最大宽度(递归)相关推荐

  1. 41. Leetcode 662. 二叉树最大宽度 (二叉树-二叉树性质)

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

  2. LeetCode 662 二叉树最大宽度

    原题链接 标签 :二叉树 BFS 解题思路:BFS广度优先 + 队列 /*** Definition for a binary tree node.* struct TreeNode {* int v ...

  3. 662. 二叉树最大宽度 golang

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

  4. 662. 二叉树最大宽度

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

  5. leetcode 662. Maximum Width of Binary Tree | 662. 二叉树最大宽度(BFS)

    题目 https://leetcode.com/problems/maximum-width-of-binary-tree/ 题解 本题思路来源于二叉树的层序遍历. 层序遍历类似问题:leetcode ...

  6. LeetCode 814. 二叉树剪枝(递归)

    文章目录 1. 题目 2. 递归解题 1. 题目 给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1. 返回移除了所有不包含 1 的子树的原二叉树. 把只包含0的子树删除(断开) ...

  7. LeetCode:二叉树的非递归中序遍历

    第一次动手写二叉树的,有点小激动,64行的if花了点时间,上传leetcode一次点亮~~~ 1 /* inorder traversal binary tree */ 2 #include < ...

  8. leetcode 662.二叉树最大深度 Java

    二叉树最大深度 题目链接 描述 示例 初始代码模板 模板 题目链接 https://leetcode-cn.com/problems/maximum-width-of-binary-tree/ 描述 ...

  9. LeetCode 104.二叉树的最大深度(递归)

    题目描述 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null,1 ...

最新文章

  1. SVN学习总结(2)——SVN冲突解决
  2. python 数据的读取
  3. Redis Info详解
  4. 博客统计:腾讯分析这些数据哪儿来的?
  5. SAP UI5 如何通过 manifest.json 文件定义第三方库依赖关系
  6. 用fft对信号进行频谱分析实验报告_示波器上的频域分析利器,Spectrum View测试分析...
  7. 计算机网络第5章(传输层)
  8. mysql函数lead用指定的字符串实现左填充指定长度
  9. linux显示fio为非法指令,FORTRAN运行错误消息列表中英对照.doc
  10. 【渝粤教育】电大中专学习指南 (3)作业 题库
  11. Linux 5.7 将支持国产 RISC-V 芯片 K210
  12. 诺禾致源css客户端,诺禾,诺禾致源:CSS 基础教学
  13. 微型计算机原理IMUL指令,微机原理与系统设计实验
  14. matlab 傅里叶变换频谱
  15. 0基础学SQL(二)
  16. 北京内推 | 秘塔科技招聘NLP算法工程师(社招校招可转正实习)
  17. 一文详解synchronized与volatile
  18. 覆盖网络(Overlay Network)
  19. ufvm可以读哪些网格_FM24C05UFVM8
  20. 计算机年龄测试题,我的世界:五道测试题,看看你游戏时间是否和MC年龄相当...

热门文章

  1. celery AttributeError: 'str' object has no attribute 'items'
  2. 关于对发送HTTP请求以及解析服务器返回的数据操作的提取到一个公共类中进行封装
  3. python问题汇总
  4. java几种删除_几种删除Linux目录的方法
  5. 图片播放器小项目(详解)
  6. 图表相同数据会自动合并问题(finereport)
  7. 关于arguments的用法
  8. 【BZOJ3640】JC的小苹果 概率DP+高斯消元
  9. css 做幻灯片效果
  10. TCP/IP 协议栈 -- 编写UDP客户端注意细节