08-二叉树高度

铭记:

\color{#DC143C}{算法 + 数据结构 = 程序}

源码下载

方法一:递归

核心思想:树的高度由左子树或右子树中的最大那个树的高度+1

    /**
     * 递归求 二叉树 高度
     * 树的高度,取决于树的左子树和右子树的高度
     * @param node 节点
     */
    private int treeHeightWithRecursion(RavenNode node) {
        if (node == null) return 0;
        return 1 + Math.max(treeHeightWithRecursion(node.leftNode), treeHeightWithRecursion(node.rightNode));
    }

方法二:非递归

核心思想:通过层序遍历来获得二叉树高度;让二叉树依次入队,然后循环遍历这个队列,直到队列为空,把每一层的元素都记录下来num,在遍历的过程中,每循环一次num--,当num==0时代表该层的元素都已经出队了,那么此时在队列中的元素都是下一层的元素,所以把队列的个数赋值给num,继续上面的过程


    /**
     * 非递归方式求二叉树高度
     *
     * @param node
     * @return
     */
    private int treeHeightWithNonRecursion(RavenNode node) {
        if (rootNode == null) return 0;
        int height = 0;
        int rowNum = 1;
        Queue<RavenNode> queue = new LinkedList<>();
        queue.add(rootNode);
        while (!queue.isEmpty()) {
            RavenNode peek = queue.remove();
            if (peek.leftNode != null) {
                queue.add(peek.leftNode);
            }
            if (peek.rightNode != null) {
                queue.add(peek.rightNode);
            }
            rowNum--;
            if (rowNum == 0) {
                // 层数+1
                height++;
                // 重新记录层的元素
                rowNum = queue.size();
            }
        }
        return height;
    }

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

推荐阅读更多精彩内容