题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
第一种写法 递归
public class Solution {
public int TreeDepth(TreeNode root) {
return getmax(root);
}
public int getmax(TreeNode root){
if(root==null) return 0;
int left=getmax(root.left);
int right=getmax(root.right);
return Math.max(left,right)+1;
}
}
第二种方法 非递归 (层序遍历)
根据层序遍历的思想稍做改动,cur为当前这层的节点之和,next为下一层节点之和。
每当cur==next时,表示当前层节点遍历完,depth++;然后进入下一层。
import java.util.*;
public class Solution {
public int TreeDepth(TreeNode root) {
if(root==null) return 0;
Queue<TreeNode> queue=new LinkedList<TreeNode>();
queue.add(root);
int depth=0,cur=0,next=1;
while(!queue.isEmpty()){
TreeNode node=queue.poll();
cur++;
if(node.left!=null)
queue.add(node.left);
if(node.right!=null)
queue.add(node.right);
if(cur==next){
next=queue.size();
cur=0;
depth++;
}
}
return depth;
}
}
其他的题题解
剑指offer题解 java版