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

【LeetCode】对称二叉树 平衡二叉树

 对称二叉树

即先判断根节点的左右子树相不相同,相同时,再判断左孩子的左子树和右孩子的右子树比较,左孩子的右子树和右孩子的左子树(当两个都相同时才是对称的).....依次递推,过程中并设置一些不满足相同的条件。

 算法代码

class Solution {public boolean isSymmetric(TreeNode root) {if(root == null) return true; //由于此题至少有一个根节点,可写可不写return isSymmetricChild(root.left,root.right);}public static boolean isSymmetricChild(TreeNode leftTree,TreeNode rightTree){if(leftTree==null && rightTree==null) return true;  //两个都为空if(leftTree!=null && rightTree==null || leftTree==null && rightTree!=null) return false; //一个为空一个不为空if(leftTree.val != rightTree.val) return false;  //值不相同/*boolean left = isduicheng(leftTree.left,rightTree.right);boolean right = isduicheng(leftTree.right,rightTree.left);return left&&right;*/return isSymmetricChild(leftTree.left,rightTree.right) && isSymmetricChild(leftTree.right,rightTree.left);//和上面注释的作用一样}
}

 

 平衡二叉树

平衡二叉树的定义:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1 。

该题的实质还是求树的高度,只要你会写求树的高度的函数代码,那基本上就没问题了,由于我们在求树的高度的时候,是从最下面往上不断的返回当前子树的左右子树高度的最大值+1,最终得到根节点的高度,也就是该树的高度。那么我们可以对求数的高度的函数进行一些改变,当每次求得当前子根节点的左右子树的高度时,进行绝对值求差值,差值小于等于1,则说明当前子根是平衡的,,接着遍历。若差值大于1,说明当前子根已经不平衡了,就不用在往下遍历了,可节省一定的时间消耗。

 

 

算法代码

class Solution {public boolean isBalanced(TreeNode root) {if(getHeight(root)==-1) return false;return true;}public static int getHeight(TreeNode root){  //求树的高度的函数if(root == null) return 0;int leftHeight = getHeight(root.left);int rightHeight = getHeight(root.right);if(leftHeight<0 || rightHeight<0) return -1; if(Math.abs(leftHeight-rightHeight)>1) return -1; //说明树不平衡了return leftHeight>rightHeight?leftHeight+1:rightHeight+1; //返回当前根的最大深度即高度}
}

http://www.lryc.cn/news/111773.html

相关文章:

  • 区块链和WEB3.0有哪些基础知识呢
  • 七、封装(1)
  • 问题解决和批判性思维是软件工程的重要核心
  • 【EI/SCOPUS征稿】2023年通信网络与机器学习国际学术会议(CNML 2023)
  • 算法-岛屿数量
  • Crescent QuickPak Crack
  • 六、ESP32数码管显示数字
  • 【Kubernetes】当K8s出现问题时,从哪些方面可以排查
  • [ MySQL ] — 库和表的操作
  • Hive常见面试题
  • 【单片机】晨启科技,酷黑版,密码锁
  • 常见监控网络链路和网络设备的方法
  • C#控制台程序+Window增加右键菜单
  • 【Docker】Docker+Zipkin+Elasticsearch+Kibana部署分布式链路追踪
  • 【小沐学C++】C++ 基于CMake构建工程项目(Windows、Linux)
  • 计算机视觉与图形学-神经渲染专题-ConsistentNeRF
  • 初级算法-其他
  • Containerd的两种安装方式
  • Android学习之路(1) 文本设置
  • Docker相关命令与入门
  • 如何配置一个永久固定的公网TCP地址来SSH远程树莓派?
  • Kubernetes架构和工作流程
  • C语言赋值号的运算顺序
  • fishing之第四篇使用案例一模拟登陆口
  • CS 144 Lab Six -- building an IP router
  • edge://settings/defaultbrowser default ie
  • Centos7安装jdk8教程——rpm安装
  • Node.js-path模块操作路径的基本使用
  • 油猴脚本:验证码识别辅助器
  • 【力扣】24. 两两交换链表中的节点 <栈>