zoukankan      html  css  js  c++  java
  • Java遍历二叉树深度宽度

    节点数据结构

    class TreeNode {
        TreeNode left = null;
        TreeNode right = null;
    }

    最大深度,基本思路是:使用递归,分别求出左子树的深度、右子树的深度,两个深度的较大值+1就是最大深度。

    // 获取最大深度
        public static int getMaxDepth(TreeNode treeNode) {
            if (treeNode == null)
                return 0;
            else {
                int left = getMaxDepth(treeNode.left);
                int right = getMaxDepth(treeNode.right);
                return 1 + Math.max(left, right);
            }
        }
    // 获取最小深度
        public static int getMinDepth(TreeNode treeNode) {
            if (treeNode == null)
                return 0;
            else {
                int left = getMinDepth(treeNode.left);
                int right = getMinDepth(treeNode.right);
                return 1 + Math.min(left, right);
            }
        }

    最大宽度,基本思路:使用队列,按层次遍历二叉树。在上一层遍历完成后,下一层的所有节点已经放到队列中,此时队列中的元素个数就是下一层的宽度。以此类推,依次遍历下一层即可求出二叉树的最大宽度。

    // 获取最大宽度
        public static int getMaxWidth(TreeNode treeNode) {
            if (treeNode == null)
                return 0;
    
            Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
            int maxWitdth = 1; // 最大宽度
            queue.add(treeNode); // 入队
    
            while (true) {
                int len = queue.size(); // 当前层的节点个数
                if (len == 0)
                    break;
                while (len > 0) {// 如果当前层,还有节点
                    TreeNode node = queue.poll();
                    len--;
                    if (node.left != null)
                        queue.add(node.left); // 下一层节点入队
                    if (node.right != null)
                        queue.add(node.right);// 下一层节点入队
                }
                maxWitdth = Math.max(maxWitdth, queue.size());
            }
            return maxWitdth;
        }

    推荐一个在线写白板代码的好地方:http://www.lintcode.com/ 

    在线能力评估:https://www.nowcoder.com/

  • 相关阅读:
    学习python第六天
    学习python第五天
    学习python第四天
    学习python第二天
    网工学Python——模块和包
    网工学Python——初识函数
    网工学Python——常用模块
    网工学Python——基础知识
    网工学Python——目录
    Python-面向对象
  • 原文地址:https://www.cnblogs.com/jager/p/6603510.html
Copyright © 2011-2022 走看看