剑指Offer_38 发表于 2017-12-04 | 分类于 剑指Offer 题目输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 解题思路解法一: 递归 123456789101112131415161718192021/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public int TreeDepth(TreeNode root) { if(root == null){ return 0; } return Math.max(TreeDepth(root.left), TreeDepth(root.right)) + 1; }} 解法二: 非递归 1234567891011121314151617181920212223242526272829303132333435363738394041import java.util.LinkedList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public int TreeDepth(TreeNode root) { if(root == null){ return 0; } LinkedList<TreeNode> list = new LinkedList<>(); list.add(root); int depth = 0; while(!list.isEmpty()){ ++depth; //计算深度的时候,每次都要把队列里的节点(一层)全部抛出 for(int i = 0; i < list.size(); ++i){ TreeNode node = list.pollFirst(); if(node.left != null){ list.add(node.left); } if(node.right != null){ list.add(node.right); } } } return depth; }}