一. 问题描述
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
3
/
9 20
/
15 7
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1
/
2 2
/
3 3
/
4 4
返回 false 。
二. 解题思路
本题思路:采用深度优先遍历+递归自顶而下判断每个节点的左右子树高度是否大于1的方法。
步骤一:递归得到每个节点左右子树的深度。然后依次比较每个节点,只要有一个节点左右子树深度大于则返回false。否则,返回true。
三. 执行结果
执行用时 :6 ms, 在所有 java 提交中击败了5.92%的用户
内存消耗 :39 MB, 在所有 java 提交中击败了37.88%的用户
四. Java代码
class Solution { public boolean isBalanced(TreeNode root) { if(root==null) { return true; }else { Stack<TreeNode> data=new Stack<TreeNode>(); data.add(root); while(!data.empty()) { TreeNode temp=data.pop(); int rinum=0,lenum=0; if(temp.right!=null) { data.push(temp.right); List<TreeNode> rightlist=new ArrayList<TreeNode>(); rightlist.add(temp.right); rinum=getTree(rightlist); } if(temp.left!=null) { data.push(temp.left); List<TreeNode> leftlist=new ArrayList<TreeNode>(); leftlist.add(temp.left); lenum=getTree(leftlist); } if(Math.abs(lenum-rinum)>1) { return false; } } return true; } } public int getTree(List<TreeNode> list) { if(list.size()==0) { return 0; } List<TreeNode> dataList=new ArrayList<TreeNode>(); for(int i=0;i<list.size();i++) { TreeNode tempNode=list.get(i); if(tempNode.left!=null) { dataList.add(tempNode.left); } if(tempNode.right!=null) { dataList.add(tempNode.right); } } return getTree(dataList)+1; } }