前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >662. 二叉树最大宽度

662. 二叉树最大宽度

作者头像
编程张无忌
发布于 2021-06-22 13:19:30
发布于 2021-06-22 13:19:30
55600
代码可运行
举报
文章被收录于专栏:悟道悟道
运行总次数:0
代码可运行

给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。 每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    int max=0;//记录最大值;
    public int widthOfBinaryTree(TreeNode root) {
        /**
        根据二叉树性质: 当前节点的左右子树下标为2*n  2*n +1
        利用bfs即可,然后bfs来确定宽度(当前层最右边的-最左边的 下标即可) ,根据这个来更新最大值
        新建一个类(节点) 
         */

        //以下是bfs模板
         Deque<Node> queue=new LinkedList();
         Node node=new Node(root,1);//构建node节点 第0层 下标为0
         queue.add(node);
         while(!queue.isEmpty()){
             int size=queue.size();
             int left=queue.getFirst().index;//当前层队首下标
             int right=queue.getLast().index;//当前层队尾下标
             max=Math.max(max,right-left+1);      
                               
             for(int i=0;i<size;i++){
                 Node curNode=queue.poll();     
                 if(curNode.node.left!=null){
                      queue.add(new Node(curNode.node.left,curNode.index*2));
                 }
                if(curNode.node.right!=null){
                    queue.add(new Node(curNode.node.right,curNode.index*2+1));    
                }                       
             }
         }
         return max;
    }
}
 class Node{
     public TreeNode node;
     public int index;

        Node(TreeNode node,int index){
            this.node=node;
            this.index=index;
        }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/06/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档