二叉树的宽度

一、二叉树的宽度

二叉树的宽度是指含有最多节点数的对应层对应的节点数,我们之前提到了二叉树的层次遍历,二叉树的宽度其实也是基于层次遍历实现的。
我们只需要在每一次记录队列的长度,每一次出队列出去的是当前这一层的全部结点,这样即可通过对比每一层的长度来实现获取最大宽度


二、二叉树的宽度代码实现

public static int maxWidth(BTNode node) {
        int maxWidth = 1, width;
        ArrayDeque<BTNode> queue = new ArrayDeque<>();
        //根节点入队
        queue.add(node);
        while (!queue.isEmpty()) {
            width = queue.size();
            //若每一层的宽度大于maxWidth,则重新赋值
            maxWidth = maxWidth < width ? width :maxWidth;
            //注意这里循环的次数是width,出队的仅仅是每一层的元素
            for (int i = 0; i < width; i++) {
                BTNode nodeTemp = queue.poll();
                if (nodeTemp.leftChild != null) {
                    queue.add(nodeTemp.leftChild);
                }
                if(nodeTemp.rightChild != null) {
                    queue.add(nodeTemp.rightChild);
                }
            }
        }
        return maxWidth;
    }

三、测试代码

/**
     * 构建二叉树
     *          3
     *       2     4
     *    5   2   2  4
     * 5
     *
     * @param args
     */
    public static void main(String[] args) {
        int[] a = {3, 2, 4, 5, 2, 2, 4, 5};
        BTNode root = BTNodeUtil.createBTNodebyArray(a);
        System.out.print("该二叉树的最大宽度为:" + maxWidth(root));
    }

输出

该二叉树的最大宽度为:4
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 二叉树结构: 二叉树宽度优先搜索: 按照二叉树的层数依次从左到右访问二叉树的节点;例如:给定一个二叉树: 按照宽度...
    LdpcII阅读 5,296评论 0 2
  • 去年二叉树算法的事情闹的沸沸扬扬,起因是Homebrew 的作者 @Max Howell 在 twitter 上发...
    Masazumi柒阅读 1,633评论 0 8
  • 本文转自 http://www.cnblogs.com/manji/p/4903990.html二叉树-****你...
    doublej_yjj阅读 696评论 0 8
  • 1.什么是二叉树? 在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”,...
    zcaaron阅读 1,297评论 2 15
  • 就这样看着书,做着题,小区里突然飘来林俊杰的“江南”,就在这一刻,恍惚间仿佛回到了那个:阳光明媚的午后,坐在靠窗的...
    帅气的阿莉阅读 198评论 3 1