二叉树的宽度和深度

Posted neuzk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的宽度和深度相关的知识,希望对你有一定的参考价值。

一、深度

递归版本

public static int getDeep(TreeNode root){
        if(root == null) return 0;
        int left = getDeep(root.left);
        int right = getDeep(root.right);
        return 1 + Math.max(left, right);
    }

非递归版本

思想:二叉树的深度就是指二叉树有几层,那么我们可以使用层序遍历来实现。

public static int getDeep(TreeNode root) {
        if (root == null) return 0;
        LinkedList<TreeNode> list = new LinkedList<>();
        list.addLast(root);
        int count = 1; //每层的结点数
        int num = 1;  //一共多少层
        while (!list.isEmpty()) {
            int size = 0; //临时保存下一层节点的个数
            for (int i = 0; i < count; i++) {
                TreeNode node = list.removeFirst();
                if (node.left != null) {
                    list.addLast(node.left);
                    size++;
                }
                if (node.right != null) {
                    list.addLast(node.right);
                    size++;
                }
            }
            count = size;
            if(size != 0)num++;
        }
        return num;
    }

二、宽度

思想:二叉树的宽度就是最宽的那一层的节点数,所以还是需要层序遍历的思想,先计算每层的结点数,然后找出最大的。

public static int getWidth(TreeNode root) {
        if (root == null) return 0;
        int width = 1; //宽度
        int num = 1;  //每层的结点数
        LinkedList<TreeNode> list = new LinkedList<>();
        list.add(root);
        while (!list.isEmpty()) {
            int size = 0; //临时保存下一层的结点数
            for (int i = 0; i < num; i++) {
                TreeNode node = list.removeFirst();
                if (node.left != null) {
                    list.addLast(node.left);
                    size++;
                }
                if (node.right != null) {
                    list.addLast(node.right);
                    size++;
                }
            }
            num = size;
            if(width < num) width = num;
        }
        return width;
    }

 

以上是关于二叉树的宽度和深度的主要内容,如果未能解决你的问题,请参考以下文章

java数据结构与算法之二叉树的最大宽度和最大深度问题

java数据结构与算法之二叉树的最大宽度和最大深度问题

求二叉树的深度和宽度

二叉树学习笔记-深度和宽度

二叉树的最小高度,最大高度(深度)和宽度

讲透学烂二叉树:二叉树的笔试题:翻转|宽度|深度