题目:
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路:
递归简单,非递归考虑使用树层次遍历
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));
}
}