这明显就是BFS问题,采用两种方法:递归与非递归
递归很简单,当前节点的子树的深度就是它的左子树和右子树最大深度加1,代码如下
/**
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;
int left=TreeDepth(root.left);
int right=TreeDepth(root.right);
return Math.max(left,right)+1;
}
}
非递归就是采用队列思想,并用curLevel记录当前层的节点个数,nextLevel记录下一层节点的个数,代码如下
import 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;
int curLevel=1,nextLevel=0;
int level=0;
LinkedList<TreeNode> lt=new LinkedList<TreeNode>();
lt.add(root);
while(!lt.isEmpty()){
TreeNode t=lt.poll();
if(t.left!=null){
lt.add(t.left);
nextLevel++;
}
if(t.right!=null){
lt.add(t.right);
nextLevel++;
}
curLevel--;
if(curLevel==0){
curLevel=nextLevel;
nextLevel=0;
level++;
}
}
return level;
}
}