题目描述:
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,只有一个黄色节点,右子树的最大深度为2,所以二叉树(一)的最大深度为2+1=3
二叉树(二)中左子树的最大深度为3,右子树的最大深度为2,所以二叉树的(二)的最大深度为3+1=4。代码也非常简洁。Java 1.8
/***
* 二叉树的最大深度,递归方法
* @param root
* @return
*/
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
第二种方法是层序遍历:
如图二叉树,
首先根节点1进入队列,这时候队列的大小为1,然后连续取出1个节点,将他们的子节点入队列,节点2,3入队。第一层遍历完毕,深度加1。
这时候队列中只有【2,3】,所以大小为2,然后连续取出2个节点,将他们的子节点入队列,节点4,5,6入队。第二层遍历完毕,深度加1。
这时候队列中只有【4,5,6】,所以大小为3,然后连续取出3个节点,将他们的子节点入队列,节点7进入。第三层遍历完毕,深度加1。
这时候队列中只有【7】,所以大小为1,然后连续取出1个节点,将他们的子节点如队列,节点7没有子节点,没有节点进入,第四层遍历完毕,深度加1。
队列为空遍历结束。
/***
* 二叉树的最大深度,层序遍历方法(队列实现)
* @param root
* @return
*/
public int maxDepthQueue(TreeNode root){
if(root==null){
return 0;
}
Queue<TreeNode> qu=new LinkedList<TreeNode>();
int deep=0;//记录深度
qu.add(root);
while(!qu.isEmpty()){
int size=qu.size();//二叉树每一层的节点个数,把这些节点取出来,该层遍历结束,深度加1.
for(int i=0;i<size;i++){
TreeNode temp=qu.poll();
if(temp.left!=null){
qu.add(temp.left);
}
if(temp.right!=null){
qu.add(temp.right);
}
}
deep++;
}
return deep;
}