题目描述
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
解题思路
是一个关于二叉树的基本题,判断一颗树是否是平衡二叉树。
相关知识
(1)平衡二叉树的概念
平衡二叉树(Balanced Binary Tree),且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
自己的代码
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
解题思路
是一个关于二叉树的基本题,判断一颗树是否是平衡二叉树。
相关知识
(1)平衡二叉树的概念
平衡二叉树(Balanced Binary Tree),且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
自己的代码
package leetcode;
/*public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}*/
public class BalancedBinaryTree {
public boolean isBalanced(TreeNode root) {
//空树处理
if(root == null) return true;
boolean balanced = true, leftIsBalanced, rightIsBalanced;
int leftHight, rightHight;
//左子树处理
if(root.left == null) {
leftHight = 0;
leftIsBalanced = true;
}
else {
leftIsBalanced = isBalanced(root.left);
leftHight = root.left.val;
}
//右子树处理
if(root.right == null) {
rightHight = 0;
rightIsBalanced = true;
}
else {
rightIsBalanced = isBalanced(root.right);
rightHight = root.right.val;
}
//本节点处理
if(leftHight > rightHight) {
root.val = leftHight + 1;
if(leftHight-rightHight>1) balanced = false;
}
else {
root.val = rightHight + 1;
if(rightHight-leftHight>1) balanced = false;
}
return leftIsBalanced && rightIsBalanced && balanced;
}
public static void main(String[] args) {
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
TreeNode node6 = new TreeNode(6);
/*node1.left = node2;
node1.right = node3;
node2.left = node4;
node2.right = node5;
node4.right = node6;*/
/*node1 = null;*/
node1.left = node2;
BalancedBinaryTree bbt = new BalancedBinaryTree();
boolean result = bbt.isBalanced(node1);
System.out.println(result);
}
}