码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树的宽度和深度

时间:2018-08-16 13:40:09      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:list   pre   层序遍历   remove   getwidth   宽度   二叉树的深度   nod   使用   

一、深度

递归版本

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;
    }

 

二叉树的宽度和深度

标签:list   pre   层序遍历   remove   getwidth   宽度   二叉树的深度   nod   使用   

原文地址:https://www.cnblogs.com/neuzk/p/9486095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!