662. 二叉树最大宽度

给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(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位有符号整数的表示范围内。

解题思路

  1. 通过list,记录每一层最左元素的位置
  2. 使用前序遍历,每次计算当前位置和该层最左元素的位置的差值,即为宽度

代码

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {List<Integer> list=new ArrayList<>();int res=0;public int widthOfBinaryTree(TreeNode root) {dfs(root,0,0);return res;}public void dfs(TreeNode root,int pos,int d) {if(root==null) return;if(list.size()-1<d)list.add(pos);res=Math.max(res,pos-list.get(d)+1);dfs(root.left,pos*2,d+1);dfs(root.right,pos*2+1,d+1);}
}

662. 二叉树最大宽度相关推荐

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

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

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

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

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

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

  4. LeetCode 662. 二叉树最大宽度(递归)

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

  5. LeetCode 662 二叉树最大宽度

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

  6. c语言返回二叉树的大小,C语言中计算二叉树的宽度的两种方式

    C语言中计算二叉树的宽度的两种方式 二叉树作为一种很特殊的数据结构,功能上有很大的作用!今天就来看看怎么计算一个二叉树的最大的宽度吧. 采用递归方式 下面是代码内容: int GetMaxWidth( ...

  7. scau 18924 二叉树的宽度

    Description 二叉树的宽度指的是具有节点数目最多的那一层的节点个数.1/ \2 3/ 4 答案为2, 第二层节点数最多,为2个节点. 输入格式 共n行. 第一行一个整数n,表示有n个结点,编 ...

  8. 1501 二叉树最大宽度和高度

    题目链接:http://codevs.cn/problem/1501/ 题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描述 Input Description 第一行 ...

  9. 2018.3.26 1501 二叉树最大宽度和高度

    题目描述 给出一个二叉树,输出它的最大宽度和高度. 输入描述 第一行一个整数n.下面n行每行有两个数,对于第i行的两个数,代表编号为i的节点所连接的两个左右儿子的编号.如果没有某个儿子为空,则为0. ...

最新文章

  1. 5G 标准 — 3GPP
  2. 照书学WPF之 Dependency Property 1
  3. uva1507(状态压缩+dfs)
  4. html5 元素重叠,javascript – 检查两个或多个DOM元素是否重叠
  5. Finalize,Dispose,SuppressFinalize
  6. java多态的实现_Java多态的实现机制是什么,写得非常好!
  7. 科普:为什么 String hashCode 方法选择数字31作为乘子
  8. 三菱FX系列PLC-编程2
  9. B站崩了,一群跟着躺枪!「小破站」到底发生了什么?
  10. 今天我们谈谈关于java自学的那些事儿(为那些目标模糊的码农们)
  11. 股票学习-量柱和k线-第十天------量线的生成机制--------谷底线
  12. 2099 找到和最大的长度为 K 的子序列
  13. 问题 E: 1.10 旅行时间  根据火车的出发时间和到达时间,编写程序计算整个旅途所用的时间。
  14. wait()、notify()、notifyAll()使用详解
  15. 将本地docker镜像推送到阿里云仓库
  16. Kali linux渗透测试系列————34、Kali linux 维持访问之创建Web后门
  17. 用python进行股票数据分析_用 Python 做股市数据分析(2)
  18. 数据驱动的网络入侵检测:最新动向与研究趋势
  19. 第四章 前馈神经网络
  20. 如何剪裁svg并压缩

热门文章

  1. iptables:tproxy做透明代理
  2. 145. 二叉树的后序遍历
  3. Wireshark(2):应用Wireshark观察基本网络协议
  4. java教程百度文库,成功拿到offer
  5. 如何保证消息队列的高可用?透彻分析源码
  6. java过滤器如何操作数据库_jsp – 使用Java中的过滤器验证用户名,密码(与数据库联系)...
  7. 经典冒泡排序及其优化
  8. Ubuntu 18.04 下如何配置mysql 及 配置远程连接
  9. [BZOJ1626][Usaco2007 Dec]Building Roads 修建道路
  10. Maven+eclipse快速入门