当前位置: 首页 > news >正文

java-代码随想录第十五天| 12.平衡二叉树、222.完全二叉树的节点个数、404.左叶子之和

目录

12.平衡二叉树

222.完全二叉树的节点个数

404.左叶子之和


思路参考:代码随想录

12.平衡二叉树

链接:110. 平衡二叉树 - 力扣(LeetCode)

题目:给定一个二叉树,判断它是否是 平衡二叉树  

题解:

1、如何判断当前传入节点为根节点的二叉树是否是平衡二叉树?左子树高度和右子树高度的差值。分别求出左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。

2、如果当前传入节点为根节点的二叉树已经不是二叉平衡树了,还返回高度的话就没意义了。

如果已经不是二叉平衡树了,可以返回-1来标记已经不符合平衡树的规则了。

/*** 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 boolean isBalanced(TreeNode root) {return getHeight(root) != 1;}private int getHeight(TreeNode root){if(root == null){return 0;}int leftHeight=getHeight(root.left);if(leftHeight == -1){return -1;}int rightHeight=getHeight(root.left);if(rightHeight == -1){return -1;}if(Math.abs(leftHeight-rightHeight) > 1){return -1;}return Math.max(leftHeight,rightHeight)+1;}
}

222.完全二叉树的节点个数

链接:222. 完全二叉树的节点个数 - 力扣(LeetCode)

题目:

        给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(从第 0 层开始),则该层包含 1~ 2h 个节点。

题解:

        在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层节点都集中在该层最左边的若干位置。若最底层为第h层,则该层包含1~2^(h-1)个节点。

        左子树的节点数+右子树的节点数+当前根节点。

        递归终止条件:空节点计数为0。

/*** 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;}return countNodes(root.left)+countNodes(root.right)+1;}
}

404.左叶子之和

链接:404. 左叶子之和 - 力扣(LeetCode)

题目:给定二叉树的根节点 root ,返回所有左叶子之和。

题解:

1.左叶子不是二叉树左侧节点

2.左叶子定义:节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点。

3.判断依据:如果该节点的左节点不为空,左节点的左节点不为空,左节点的右节点不为空,则该节点为左叶子

/*** 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 sumOfLeftLeaves(TreeNode root) {//如果该节点的左节点不为空,左节点的左节点不为空,左节点的右节点不为空,则该节点为左叶子if(root == null) return 0;//计算左子树所有的左叶子之和int leftValue=sumOfLeftLeaves(root.left);//计算右子树所有的左叶子之和int rightValue=sumOfLeftLeaves(root.right);//计算当前节点左叶子的值int midValue=0;if(root.left != null && root.left.left == null && root.left.right == null){midValue= root.left.val;}int sum=midValue+leftValue+rightValue;return sum; }
}
http://www.dtcms.com/a/348373.html

相关文章:

  • 网络安全转型书籍清单
  • JavaScript 性能优化实战:全方位提升 Web 应用性能
  • 【LeetCode 热题 100】152. 乘积最大子数组——(解法一)递推
  • Vue2+Vue3前端开发笔记合集
  • 九、redis 入门 之 数据库和缓存一致性问题
  • Vue2+Vue3前端开发_Day12-Day14_大事件管理系统
  • Python无穷大与NaN处理完全指南:从基础到工程级解决方案
  • 【Java】springboot的自动配置
  • Wagtail CRX 简介
  • Python使用-Python环境安装
  • 【分布式中间件】Kafka 核心配置深度解析与优化指南
  • 【存在重复元素II】
  • 57 C++ 现代C++编程艺术6-类的内部类
  • MSF基础知识
  • Flask蓝图:模块化开发的利器
  • 数学建模--模糊综合评价法
  • 优化OpenHarmony中lspci命令实现直接获取设备具体型号
  • 7.6 残差网络
  • Palantir Foundry 领先其他数据平台5到10年:一位使用者的深入观察
  • vscode配置remote-ssh进行容器内开发
  • BQTLOCK 勒索软件即服务出现,拥有复杂的规避策略
  • MRO and mixin in Python Django
  • GD32VW553-IOT 测评和vscode开发环境搭建
  • Flutter性能优化完全指南:构建流畅应用的实用策略
  • 多奥将梯控系统、无线网桥及工业交换机的核心功能与参数整合为结构化表格,并补充应用价值分析
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十八) 使用表格
  • 时间复杂度
  • 多核多线程应用程序开发可见性和乱序如何处理
  • ESNP LAB 笔记:配置MPLS(Part2)
  • Java Stream API详解