题目描述
实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。
给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。
给出数据结构:
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
解题思路:
- 利用迭代检查树的高度(从根节点出发递归检查每个子树的高度),checkHeight函数来检查.具体含义:平衡返回子树的实际高度 如果不平衡 会返回-1 并跳出
public class Balance {
public int checkHeight(TreeNode root){//平衡返回子树的实际高度 如果不平衡 会返回-1 并跳出
if(root == null)
return 0;
//判断左子树是否平衡
int leftHeight = checkHeight(root.left);
if(leftHeight == -1)
return -1;
//判断右子树是否平衡
int rightHeight = checkHeight(root.right);
if(rightHeight == -1)
return -1;
//判断本节点是否平衡
int getHeight = leftHeight - rightHeight;
if(Math.abs(getHeight) > 1) {
return -1;
}
else {
//返回实际高度
return Math.max(leftHeight,rightHeight)+1;
}
}
public boolean isBalance(TreeNode root) {
// write code here
if(root == null){
return true;
}else {
int height = checkHeight(root);
if(height == -1){
return false;
}
else
return true;
}
}
}