问题描述
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
思路
- 明确树已经建好,只需查深度即可
- 对于每个节点处理相同的操作,压入栈,出栈的过程,递归调用
- 树的最大深度即,左子树或者右子树最大深度,再加上根的1即可
之前总是纠结在如何将数组构建成二叉树的过程,其实是没审好题,看给的方法头,传入的就是一棵数,不需要自己构建,所以,刚开始时候的思维方向就有问题,要明确题的意思,是想让你做什么,是要建立树?还是在已经树的基础上求深度。
实现
/**
* 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;
}else if(root.left==null&&root.right==null){
return 1;
} else {
return 1+Math.max(maxDepth(root.left),maxDepth(root.right));
}
}
}
遇到的问题
- 审题要看清题中想让你做的是什么,是建立树还是,树已知
- if else要对应写好,要分析好执行的过程
- 左子树、右子树的深度求出来之后,要加上根节点的深度1