您的位置:首页 > 其它

LeetCode Maximum Depth of Binary Tree

2016-02-23 18:04 316 查看
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.

思路分析:这题比較简单。关于树的题目通常都能够用递归解决,这题也不例外。递归解法的思路是返回左右子树中深度较大的子树深度加1作为自己的深度。每递归调用一次深度加1.

递归解法(DFS递归搜索)

/**
* Definition for binary tree
* 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;
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
}


非递归的解法须要借助队列实现,BFS搜索树节点,首先root入队列。然后不断从队列头取出节点,将该节点的左右孩子(假设有)入队列。直到队列为空。注意维护当前层次的节点数和下一层次的节点数。这样在每次换层的时候,把层次计数器level加1,最后返回level层次数作为结果就可以。因为每一个node訪问一次。时间复杂度O(n)。

非递归解法(借助队列BFS)

/**
* Definition for binary tree
* 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;
LinkedList<TreeNode> treeNodeQueue = new LinkedList<TreeNode>();
int level = 0;
treeNodeQueue.add(root);
int curLevelNum = 1;//# of nodes in the current level
int nextLevelNum = 0;//# of nodes in the next level
while(!treeNodeQueue.isEmpty()){
TreeNode curNode = treeNodeQueue.poll();//find and remove; different from peek
curLevelNum--;
if(curNode.left != null){
treeNodeQueue.add(curNode.left);
nextLevelNum++;
}
if(curNode.right != null){
treeNodeQueue.add(curNode.right);
nextLevelNum++;
}
if(curLevelNum == 0){
level++;
curLevelNum = nextLevelNum;
nextLevelNum = 0;//added a level
}
}
return level;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: