题目
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的距离。
样例
给出一棵如下的二叉树:
1
/ \
2 3
/ \
4 5
这个二叉树的最大深度为3
代码
(1)遍历(LevelOrder)
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree.
* @return: An integer.
*/
public int maxDepth(TreeNode root) {
if(root==null) return 0;
int maxh=1;
Queue<TreeNode> q = new LinkedList<TreeNode>();
q.add(root);
int knum=1;
while(!q.isEmpty()){
knum--;
TreeNode t = q.poll();
//levelOrder
//孩子入队
if(t.left!=null){
q.add(t.left);
}
if(t.right!=null){
q.add(t.right);
}
if(knum==0 && q.size()>0){
maxh++;
knum=q.size();
}
}
return maxh;
}
}
(2)分治
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution{
//分治
public int maxDepth(TreeNode root){
if(root==null) return 0;
return getHeight(root);
}
int getHeight(TreeNode node){
if(node==null)
return 0;
if(node.left==null && node.right==null){
return 1;
}
return Math.max(getHeight(node.left), getHeight(node.right))+1;
}
}