给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回它的最大深度 3
求最大深度相当于求树的高度,有递归和迭代两种做法,递归的做法相比大家都直到怎么做了,就不写了。
对于迭代的做法是,将树用bfs遍历,用last记录当前层还有多少个节点没被遍历到,next表示下一层有多少个节点,当last等于零时,就表明要进入下一层了,此时层数计数器level加一,然后last=next,next=0,直至这棵树被遍历完即可。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
if(root==null)return 0;
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
int level = 0;
int next=0;
int last=1;
while(!q.isEmpty()){
TreeNode r = q.poll();
last--;
if(r.left!=null){
q.add(r.left);
next++;
}
if(r.right!=null){
q.add(r.right);
next++;
}
if(last==0){
level++;
last=next;
next=0;
}
}
return level;
}
}