import hsx.jianzhi.util.TreeNode;
import java.util.LinkedList;
import java.util.Queue;
/**
* 二叉树的深度
*
* 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
*/
public class JZ038TreeDepth {
/**
* 递归
* @param root
* @return
*/
public int TreeDepth(TreeNode root) {
if (root == null) {
return 0;
}
int leftDepth = TreeDepth(root.left);
int rightDepth = TreeDepth(root.right);
return Math.max(leftDepth, rightDepth) + 1;
}
/**
* 采用队列的方式
* @param root
* @return
*/
public int TreeDepth2(TreeNode root) {
if (root == null) {
return 0;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int nextCount = 1; //
int count = 0;
int depth = 0;
while (queue.size() > 0) {
TreeNode topNode = queue.poll();
count++;
if (topNode.left != null) {
queue.add(topNode.left);
}
if (topNode.right != null) {
queue.add(topNode.right);
}
if (count == nextCount) { // 数据的每一层进行校验,当前层数据都没有了 ##
nextCount = queue.size();
count = 0;
depth++;
}
}
return depth;
}
}