第38题——二叉树的深度

135 阅读1分钟

题目:

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

思路:

递归简单,非递归考虑使用树层次遍历

Java

package nowcoder;

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

public class S38_TreeDepth {
    //递归方法
    /*public int TreeDepth(TreeNode root){
        if (root == null)
            return 0;
        int ld = TreeDepth(root.left);
        int rd = TreeDepth(root.right);
        return ld > rd ? ld+1 : rd+1;
    }*/
    //非递归方法,层次遍历
    public int TreeDepth(TreeNode root){
        if (root == null)
            return 0;
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        int depth = 0;
        int count = 0;
        int layerCount = 1;
        queue.offer(root);
        TreeNode out;
        while (!queue.isEmpty()){
            out = queue.poll();
            count++;
            if (out.left != null)
                queue.offer(out.left);
            if (out.right != null)
                queue.offer(out.right);
            if (count == layerCount){
                depth++;
                layerCount = queue.size();
                count = 0;
            }
        }
        return depth;
    }
    public static void main(String[] args){
        S38_TreeDepth s38 = new S38_TreeDepth();
        PrintTreeLayer pt = new PrintTreeLayer();
        Integer[] array = {1, 2, 3, 4, 5, 6, 7, 8};
        TreeNode root = pt.arrayToTree(array, 0);
        System.out.println(s38.TreeDepth(root));
    }
}