(Java 剑指 offer)平衡二叉树
发布日期:2021-05-07 19:44:18 浏览次数:19 分类:精选文章

本文共 1647 字,大约阅读时间需要 5 分钟。

文章目录

一、题目

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树

平衡二叉树,左右子树的高度差为 1,-1,0

二、题解

该题类似上篇写的 ,只需在每次计算得到左右子树的深度后,加一个判断左右子树的高度差操作即可。

public class Solution {       //判断是否是二叉平衡树的标志    private boolean isBalanced=true;    public boolean IsBalanced_Solution(TreeNode root) {           TreeDepth(root);        return isBalanced;    }    public int TreeDepth(TreeNode root) {           //结点为空返回0        if (root == null) {               return 0;        }        //分别递归计算左右子树的深度        int leftDepth = TreeDepth(root.left);        int rightDepth = TreeDepth(root.right);        //判断左右子树的差值的绝对值,大于1则不是二叉平衡树        if(Math.abs(leftDepth-rightDepth)>1){               isBalanced=false;        }        //左右子树较大者加一即为该树深度        return leftDepth > rightDepth ? (leftDepth + 1) : (rightDepth + 1);    }}

对于无论哪一步得到高度差不满足,还是要走完整个平衡二叉树,暂时不知道怎么解决

代码优化版,不设置全局变量:

public class Solution {       public boolean IsBalanced_Solution(TreeNode root) {           return getTreeLength(root) !=-1;    }    public int getTreeLength(TreeNode root){           if(root==null){               return 0;        }        int l = getTreeLength(root.left);        int r = getTreeLength(root.right);        if(l==-1 || r==-1 || Math.abs(l-r)>1){               return -1;        }        return Math.max(l,r)+1;    }}

三、总结

(1)求解二叉树的深度

public int getTreeLength(TreeNode root){           if(root==null){               return 0;        }        int l = getTreeLength(root.left);        int r = getTreeLength(root.right);        if(l==-1 || r==-1 || Math.abs(l-r)>1){               return -1;        }        return Math.max(l,r)+1;    }

(2)数学相关方法

//绝对值Math.abs(l-r)//最大值Math.max(l,r)
上一篇:Oracle 序列及表的数据管理和操作
下一篇:Oracle 创建表空间和用户

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月06日 02时06分41秒