给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回它的最大深度 3 。
本题有两种思路:1.递归找出左右最大深度再对比得出最大的二叉树深度。2.层次遍历利用栈或是队列来实现。选择了简单的递归来实现。
分析:1 H=1+max( H(9-subtree) ,H(20-subtree)) = 3
H(9-subtree) =1+max(0,0)=1 返回1处
2 H(20-subtree) = 1+max( H(15-subtree) , H(7-subtree) ) =2 返回上一步1处
H(15-subtree) =1+max(0,0)=1 返回上一步2处
H(7-subtree) = 1+ max(0,0)=1 返回上一步2处
/**
* 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 {
int max = maxNumber(root);
return max;
}
}
//不断递归左右子树找下去对比
public int maxNumber(TreeNode root) {
//递归停止条件
if(root==null) {
return 0;
}//这步得加不然遍历到最后死递归。出现空指针异常。
int aa = Math.max(maxNumber(root.left),maxNumber(root.right))+1;
//System.out.println(aa);
return aa;
}
}
上面这个图片引用别人的。