输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路一:采用递归,求出左右节点的深度,比较哪边大,就可以了。
public class Solution {
//递归常规解法
/* public int TreeDepth(TreeNode root) {
int LD = 0;
int RD = 0;
if(root==null)
return 0;
else
{
LD = TreeDepth(root.left);
RD = TreeDepth(root.right);
return(LD>RD?LD:RD)+1;
}
}
}
```
思路二:采用层次遍历,用一个队列来存节点。当出队的节点等于当前层的节点数时层数加1.
>import java.util.LinkedList;
public class Solution {
//非递归,层次遍历
public int TreeDepth(TreeNode root) {
if(root == null)
return 0;
// 用来存储每一层的节点
LinkedList< TreeNode > queue = new LinkedList<>();
//用来计数,当刚好等于这一层的节点数的时候count == nextCount,层数加1
int count = 0;
//记录层数
int depth = 0;
//记录每一层的总个数
int nextCount = 1;
queue.add(root);
while(queue.size() != 0)
{
TreeNode top = queue.poll();
//每弹出一个节点,计数器加1
count++;
//左节点存在,则左节点入队
if(top.left != null)
{
queue.add(top.left);
}
//右节点存在,则右节点入队
if(top.right != null)
{
queue.add(top.right);
}
//当当前层的节点数等于出来的节点数,表明当前层的节点全部出队列
if(count==nextCount)
{
nextCount = queue.size();
count = 0;
depth++;
}
}
return depth;
}
}