二叉树深度
描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
首先介绍下树的高度、深度、层三个概念
- 高度:从下往上,从0开始。
- 深度:从上往下,从0开始。
- 层:从上往下,从1开始。
本题有两种写法。
递归:
public int TreeDepth(TreeNode root) {
if(root == null){
return 0;
}
int left = TreeDepth(root.left);
int right = TreeDepth(root.right);
int deep = left>right?left:right;
return deep + 1;
}
非递归
非递归可以借助层级遍历的手段,当本层节点遍历完毕,层级数+1。
public int TreeDepth(TreeNode pRoot)
{
if(pRoot == null){
return 0;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(pRoot);
// currentCount:已遍历节点数,nextCount:下层节点数
int depth = 0, currentCount = 0, nextCount = 1;
while(queue.size()!=0){
TreeNode top = queue.poll();
currentCount++;
if(top.left != null){
queue.add(top.left);
}
if(top.right != null){
queue.add(top.right);
}
// 相等说明本层遍历完
if(currentCount == nextCount){
nextCount = queue.size();
currentCount = 0;
depth++;
}
}
return depth;
}