给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3<br /> / \<br /> 9 20<br /> / \<br /> 15 7<br />返回它的最大深度 3
思路:计数器,每递归一次加一,无递归后统计结果,其实就是拆出左树和右树深度取最大值
public int invertTree(TreeNode root) {
int depth = 0;
if(root!=null){
depth=depth+1;
int left = depth+invertTree(root.left);
int right = depth+invertTree(root.right);
return Math.max(left,right);
}
return 0;
}
官方的解决思路更清晰一些:
public int invertTree(TreeNode root) {
if(root==null){
return 0;
}else {
int leftDepth = invertTree(root.left);
int rightDepth = invertTree(root.right);
return Math.max(leftDepth,rightDepth)+1;
}
}
官方思路: max(l,r)+1 l为左树深度,r为右树深度,递归时,每到一层,左右树深度都+1,最终取出最大值+1(根数)
全代码
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
class Solution {
public static void main(String[] args) {
TreeNode treeNode1 = new TreeNode(7);
TreeNode treeNode2 = new TreeNode(15);
TreeNode treeNode3 = new TreeNode(20,treeNode2,treeNode1);
TreeNode treeNode6 = new TreeNode(9,null,null);
TreeNode treeNode = new TreeNode(3,treeNode6,treeNode3);
Solution solution = new Solution();
System.out.println(solution.invertTree(treeNode));
}
public int invertTree(TreeNode root) {
int depth = 0;
if(root!=null){
depth=depth+1;
int left = depth+invertTree(root.left);
int right = depth+invertTree(root.right);
return Math.max(left,right);
}
return 0;
}
}