力扣 662 https://leetcode.cn/problems/maximum-width-of-binary-tree/


需要了解树的顺序存储

如果是普通的二叉树 ,底层是用链表去连接的

如果是满二叉树,底层用的是数组去放的,而数组放的时候 会有索引对应 当前父节点是索引i,下一个左右节点就是2i,2i+1

利用满二叉树的索引特征

所以需要对每个节点进行一个索引赋值,赋值在队列中,队列用数组表示

核心代码如下

复制代码
public int widthOfBinaryTreeBetter(TreeNode root) {
    Queue<Pair<TreeNode,Integer>> queue = new LinkedList<>();


    queue.add(new Pair<>(root,1));
    int res=0;
    while (!queue.isEmpty()){

        int size = queue.size();
        int left=-1;
        int right=-1;
        for (int i = 0; i < size; i++) {
            Pair<TreeNode, Integer> poll = queue.poll();
            Integer value = poll.getValue();
            if (left==-1){
                left=value;
            }
            right=value;

            TreeNode temp = poll.getKey();
            if (temp.left!=null){
                queue.add(new Pair<>(temp.left,value*2));
            }
            if (temp.right!=null){
                queue.add(new Pair<>(temp.right,value*2+1));
            }
            res=Math.max(right-left+1,res);
        }

    }
    return res;
}
复制代码

 

posted @   故里oc  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示