描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
示例1
输入:
{1,2,3,4,5,#,6,#,#,7}
返回值:4
第一种解法
循环所有情况,对于递归熟悉的同学,使用递归来完成,非常简单,取最长路径即可。代码如下
public int firstTreeDepth(TreeNode root) {
if(null == root ){
return 0;
}
int left = firstTreeDepth(root.left);
int right = firstTreeDepth(root.right);
return left > right ? left+1: right+1;
}
第二种解法
那就不使用递归,采用一个辅助类 队列来完成遍历,代码如下
public int secondTreeDepth(TreeNode root) {
int result = 0;
if(null == root ){
return result;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int count = 0,nextCount = 1;
while (!queue.isEmpty()){
TreeNode poll = queue.poll();
count++;
if(poll.right != null){
queue.add(poll.right);
}
if(poll.left != null){
queue.add(poll.left);
}
//把当前层都遍历完了 深度才+1
if(count == nextCount){
nextCount = queue.size();
count = 0;
result++;
}
}
return result;
}