zoukankan      html  css  js  c++  java
  • 剑指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;
        }
    }
    
    
  • 相关阅读:
    dsadsad
    线程池,封装使用,实现控制子线程
    如何能很好地安排好自己的时间?
    中文验证码
    海量数据处理专题(七)——数据库索引及优化
    java tree jtree的使用
    基于Cookie的单点登录(SSO)系统介绍
    急求VS2010的Cookie解决方法
    微软企业库5.0 学习之路系列文章索引
    Net 4.0 Parallel编程(八)Task中的数据共享(中)
  • 原文地址:https://www.cnblogs.com/wupeixuan/p/8623237.html
Copyright © 2011-2022 走看看