给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7],

  1. 3<br /> / \<br /> 9 20<br /> / \<br /> 15 7<br />返回它的最大深度 3

思路:计数器,每递归一次加一,无递归后统计结果,其实就是拆出左树和右树深度取最大值

  1. public int invertTree(TreeNode root) {
  2. int depth = 0;
  3. if(root!=null){
  4. depth=depth+1;
  5. int left = depth+invertTree(root.left);
  6. int right = depth+invertTree(root.right);
  7. return Math.max(left,right);
  8. }
  9. return 0;
  10. }

官方的解决思路更清晰一些:

  1. public int invertTree(TreeNode root) {
  2. if(root==null){
  3. return 0;
  4. }else {
  5. int leftDepth = invertTree(root.left);
  6. int rightDepth = invertTree(root.right);
  7. return Math.max(leftDepth,rightDepth)+1;
  8. }
  9. }

官方思路: max(l,r)+1 l为左树深度,r为右树深度,递归时,每到一层,左右树深度都+1,最终取出最大值+1(根数)

全代码

  1. class TreeNode {
  2. int val;
  3. TreeNode left;
  4. TreeNode right;
  5. TreeNode(int val) { this.val = val; }
  6. TreeNode(int val, TreeNode left, TreeNode right) {
  7. this.val = val;
  8. this.left = left;
  9. this.right = right;
  10. }
  11. }
  12. class Solution {
  13. public static void main(String[] args) {
  14. TreeNode treeNode1 = new TreeNode(7);
  15. TreeNode treeNode2 = new TreeNode(15);
  16. TreeNode treeNode3 = new TreeNode(20,treeNode2,treeNode1);
  17. TreeNode treeNode6 = new TreeNode(9,null,null);
  18. TreeNode treeNode = new TreeNode(3,treeNode6,treeNode3);
  19. Solution solution = new Solution();
  20. System.out.println(solution.invertTree(treeNode));
  21. }
  22. public int invertTree(TreeNode root) {
  23. int depth = 0;
  24. if(root!=null){
  25. depth=depth+1;
  26. int left = depth+invertTree(root.left);
  27. int right = depth+invertTree(root.right);
  28. return Math.max(left,right);
  29. }
  30. return 0;
  31. }
  32. }