Maximum Depth of Binary Tree
leetcode上原题目为:
Given a binary tree, find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
分析:题目的意思是给定一个二叉树,求二叉树的最大深度,即根节点到叶子节点长度最大的路径上节点个数。在实现的过程中,我采用的是递归调用的方法,类似于二叉树深度优先变量(DFS)。
首先判断输入的节点是否为空,若为空则返回深度为0;否则返回的应该是左右子树的最大深度值加1。
附我的代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int maxDepth(TreeNode root) {
if(root == null){
return 0;
}
int lh=0;
int rh=0;
lh = maxDepth(root.left);
rh = maxDepth(root.right);
if(lh>=rh){
return lh+1;
}
else{
return rh+1;
}
}
}
整理之后
/**
* 采用递归的思想做。一棵树的最大深度为其左子树和右子树中深度较大者+1.
*/
public int TreeDepth(TreeNode root) {
if(root == null){
return 0;
}else{
return Math.max(TreeDepth(root.left), TreeDepth(root.right))+1;
}
}
另外,完成了自己的代码之后在网上看到有人用宽度优先遍历(BFS)实现如下:
int maxDepth2(TreeNode root)
{
if (root == null){
return 0;
}
Queue<TreeNode> que = new LinkedList<TreeNode>();
int nCount = 1;
int nDepth = 0;// 记录队列里面每一层上的元素
que.add(root);
while(!que.isEmpty()) {
TreeNode pTemp = que.poll();
nCount --;
if (pTemp.left != null)
que.add(pTemp.left);
if (pTemp.right !=null)
que.add(pTemp.right);
if (nCount == 0) {
nDepth ++;//记录的是同一层上的节点数
nCount = que.size();//记录的是同一层上节点个数
}
}
return nDepth;
}