题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
解题思路:
根据求解二叉树深度的问题。可以将该问题从两种解题方法考虑,分别是自顶向下和自底向上。
首先,自顶向下的方法中,通过引入一个HashMap的结构,记录节点与节点深度。不过java中的hashmap使用get函数之前需要使用containsKey函数判断是否包含当前节点。
先通过dfs函数,递归求解二叉树中全部节点及其对应的深度,并使用hashmap数据结构保存下来。之后按照根节点,左右子节点的顺序依次判断每个节点的左右子树深度差是否小于等于1,之后再判断左右两个子树。代码如下:
import java.util.HashMap ;
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
HashMap<TreeNode,Integer> map = new HashMap<> () ;
if(root == null) return true ;
dfs(root,map) ;
if(judge(root,map)) {
return true ;
}
return false ;
}
public boolean judge(TreeNode root, HashMap<TreeNode,Integer>map) {
if(root == null) return true ;
i