专栏首页武培轩的专栏剑指Offer-二叉树的深度

剑指Offer-二叉树的深度

package Tree;


import java.util.LinkedList;
import java.util.Queue;

/**
 * 二叉树的深度
 * 输入一棵二叉树,求该树的深度。
 * 从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
 */
public class Solution13 {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        Solution13 solution13 = new Solution13();
        TreeNode treeNode = solution13.createBinaryTreeByArray(array, 0);
        System.out.println(solution13.TreeDepth_2(treeNode));
    }

    /**
     * 非递归,层次遍历
     *
     * @param root
     * @return
     */
    public int TreeDepth_2(TreeNode root) {
        if (root == null) {
            return 0;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        int start = 0;
        int end = 1;
        int depth = 0;
        while (!queue.isEmpty()) {
            TreeNode temp = queue.poll();
            start++;
            if (temp.left != null) {
                queue.offer(temp.left);
            }
            if (temp.right != null) {
                queue.offer(temp.right);
            }
            if (start == end) {
                start = 0;
                end = queue.size();
                depth++;
            }
        }
        return depth;
    }

    /**
     * 递归
     *
     * @param root
     * @return
     */
    public int TreeDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        return Math.max(TreeDepth(root.left) + 1, TreeDepth(root.right) + 1);
    }

    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

        public TreeNode(int val) {
            this.val = val;
        }

    }

    public TreeNode createBinaryTreeByArray(int[] array, int index) {
        TreeNode tn = null;
        if (index < array.length) {
            int value = array[index];
            tn = new TreeNode(value);
            tn.left = createBinaryTreeByArray(array, 2 * index + 1);
            tn.right = createBinaryTreeByArray(array, 2 * index + 2);
            return tn;
        }
        return tn;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 剑指Offer-平衡二叉树

    package Tree; /** * 平衡二叉树 * 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 * 平衡二叉树(Balanced Binary ...

    武培轩
  • Leetcode#191. Number of 1 Bits(位1的个数)

    编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。

    武培轩
  • Leetcode#461. Hamming Distance(汉明距离)

    武培轩
  • 剑指Offer-平衡二叉树

    package Tree; /** * 平衡二叉树 * 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 * 平衡二叉树(Balanced Binary ...

    武培轩
  • 如何比较?Comparable还是Comparator

    我家开了个小卖店,为了实现数字化管理,我准备写个后台程序来对所有货物进行管理。首先定义了这个实体类,这个类就是“货物”类,num指的是他的编号,s指他的名称或描...

    naget
  • 剑指offer——序列化二叉树

    AI那点小事
  • Tree - 104. Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth.

    用户5705150
  • 简单算法杂例

    第一:如果B栈为空,那么将A中的所有元素依次弹出后放入B栈中(负负为正,FILO顺序颠倒,再颠倒依次就为原始的顺序),此时B栈中已经有了元素,弹出的方式见“第二...

    大学里的混子
  • Golang Leetcode 515. Find Largest Value in Each Tree Row.go

    版权声明:原创勿转 https://blog.csdn.net/anakinsun/article/details/89175696

    anakinsun
  • 算法篇:树之倒数k个节点

    这类题目的核心思想是,利用二叉树的中序遍历是从小到大的,将其转变成数组,然后对这个有序数组进行取值操作就可以了。

    灰子学技术

扫码关注云+社区

领取腾讯云代金券