您的位置:首页 > 其它

3.Maximum Depth of Binary Tree

2015-10-13 20:43 302 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: