每日算法之判断是不是平衡二叉树

[复制链接]
发表于 2022-11-20 10:05:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
JZ79 判断是不是平衡二叉树

描述
  1. 输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。
  2. 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
  3. 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
复制代码
思路
  1. 左右两个子树的高度差的绝对值不超过1
  2. 左右两个子树都是一棵平衡二叉树
复制代码
代码
  1. package esay.JZ79判断是不是平衡二叉树;
  2. class TreeNode {
  3.     int val = 0;
  4.     TreeNode left = null;
  5.     TreeNode right = null;
  6.     public TreeNode(int val) {
  7.         this.val = val;
  8.     }
  9. }
  10. public class Solution {
  11.     //自顶向下
  12.     /*public boolean IsBalanced_Solution(TreeNode root) {
  13.         //空树也是平衡二叉树
  14.         if (root == null) return true;
  15.         //左子树深度
  16.         int left = deep(root.left);
  17.         //右子树深度
  18.         int right = deep(root.right);
  19.         if (left - right > 1 || right - left > 1) return false;
  20.         return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
  21.     }
  22.     public int deep (TreeNode node) {
  23.         if (node == null) return 0;
  24.         //左遍历
  25.         int left = deep(node.left);
  26.         //右遍历
  27.         int right = deep(node.right);
  28.         return left > right ? left + 1 :right + 1;
  29.     }*/
  30.     //自底向上
  31.     public boolean IsBalanced_Solution(TreeNode root) {
  32.         if (root == null) return true;
  33.         return getdepth(root) != -1;
  34.     }
  35.     public int getdepth (TreeNode node) {
  36.         if (node == null) return 0;
  37.         //左遍历
  38.         int left = getdepth(node.left);
  39.         if (left < 0) return -1;
  40.         //右遍历
  41.         int right = getdepth(node.right);
  42.         if (right < 0) return -1;
  43.         return Math.abs(left - right) > 1 ? -1 : Math.max(left, right) + 1;
  44.     }
  45. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表