代码随想录算法训练营第十六天二叉树 java : 104.二叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

前言

今天将主要围绕 深度高度 来展开
复习一下递归三部曲

  • 确定递归函数的参数和返回值
  • 确定终止条件
  • 确定单层递归的逻辑

深度是个啥,高度又是啥

深度: 从根节点 到 最远叶子节点的距离 一般采用前序遍历
在这里插入图片描述
这三叉树的最大深度 为 3
高度 : 从最远叶子节点 到 根节点的距离 一般采用后续遍历
在这里插入图片描述
因为根节点的高度 就是 这颗二叉树的最大深度 今天的题都是用后续遍历做的

Leetcode 104.二叉树的最大深度

题目讲解

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     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 int maxDepth(TreeNode root) {
//  按照高度即深度的思路 因为 深度 是按照后序算法来做的
         if( root ==null)
         {
             return 0;
         }
       int leftHeight = maxDepth( root.left);
       int rightHeight = maxDepth(root.right);
       int Height = Math.max( leftHeight,rightHeight) +1;
       return Height;
    }
}

Leetcode 111.二叉树的最小深度

题目讲解

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     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 int minDepth(TreeNode root) {
  
       if( root == null)
       {
           return 0;
       }
       int leftHeight = minDepth(root.left);
       int rightHeight = minDepth(root.right);
       if( root.left!=null && root.right==null)
       {
           return leftHeight+1;
       }
       if( root.right!= null && root.left==null)
       {
           return rightHeight+1;
       }

       return Math.min( rightHeight,leftHeight)+1;
    }
}

Leetcode 222.完全二叉树的节点个数(优先掌握递归

题目讲解

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     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 int countNodes(TreeNode root) {
//   
   if( root ==null)
     return 0;
   TreeNode left = root.left;
   TreeNode right = root.right;
    int leftdepth =0;
    int rightdepth=0;  
   while( left!= null)
   {
       left= left.left;
       leftdepth++;
   }
   while( right!=null)
   {
       right=right.right;
       rightdepth++;
   }
   if( rightdepth== leftdepth)
   {
       return (2<<leftdepth)-1;
   }

   return countNodes(root.left)+countNodes(root.right)+1;
 
    }
}

总结

无论是求二叉树的最大深度还是最小深度 我都采用了后续遍历的方式
左右 中 +1到父节点 加1再到根节点
在这里插入图片描述
虽然不喜欢糊弄事 不过接下来还要配环境就到这吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值