题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路
递归:
假如是空节点,则返回0;
否则,原树的深度由左右子树深度较深的加1,为原树的深度
具体实现代码如下(递归):
// 递归写法
public class Solution {
public int TreeDepth(TreeNode pRoot){
if(pRoot == null){
return 0;
}
int left = TreeDepth(pRoot.left);
int right = TreeDepth(pRoot.right);
return Math.max(left, right) + 1;
}
}
BFS(宽度优先遍历):
①使用额外空间Queue(队列)
②将二叉树的每行的结点依次加入队列
③策略:层次遍历,每走一层 depth+1
具体实现如下图所示:
具体实现代码如下(BFS):
// 非递归解法
public int TreeDepth1(TreeNode pRoot){
// 代码的鲁棒性
if(pRoot == null){
return 0;
}
// 定义Queue
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(pRoot);
int depth = 0, count = 0, nextCount = 1;
// 层次遍历
while(queue.size()!=0){
TreeNode top = queue.poll();
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;
}
NowCoder(Online Coding, Please Click)