题目
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
示例
给定二叉树 [3,9,20,null,null,15,7]
返回它的最大深度 3 。
解题思路
后序遍历(DFS)
树的后序遍历 / 深度优先搜索往往利用 递归 或 栈 实现,本文使用递归实现。
关键点: 此树的深度和其左(右)子树的深度之间的关系。显然,此树的深度 等于 左子树的深度 与 右子树的深度 中的 最大值 +1+1
终止条件: 当 root 为空,说明已越过叶节点,因此返回 深度 0
计算节点 root 的 左子树的深度 ,即调用 maxDepth(root.left);
计算节点 root 的 右子树的深度 ,即调用 maxDepth(root.right);
最后比较左右子树深度的大小关系,然后返回较大的那个数值加上1;
代码
public int maxDepth(TreeNode root) {//这里使用后序遍历
if(root==null){
return 0;
}
int left=maxDepth(root.left);
int right=maxDepth(root.right);
return Math.max(left+1,right+1);
}