題目描述:
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
平衡二叉樹具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,
思路:
我們利用求二叉樹的高度的函數,分別求出左右二叉樹的高度,二者只差<=1,則是平衡二叉樹。
代碼:
package offer01;
public class TestNo39 {
static class TreeNode{
int val = 0;
TreeNode left = null;
TreeNode right = null;
TreeNode(int val){
this.val = val;
}
}
public static void main(String[] args) {
TreeNode root = new TreeNode(0);
TreeNode node1 = new TreeNode(3);
TreeNode node2 = new TreeNode(4);
root.left = node1;
root.right = node2;
System.out.println(new TestNo39().IsBalanced_Solution(root));
}
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null)
return true;
//求出左子樹的高度
int left = depth(root.left);
//求出右子樹的高度
int right =depth(root.right);
//求左右子樹高度的差值
int Dapth = Math.abs(left-right);
return Dapth>1 ? false:true;
}
//遞歸求左右子樹的高度
private int depth(TreeNode pRootOfTree){
if(pRootOfTree == null)
return 0;
int lDepth = depth(pRootOfTree.left);
int rDepth = depth(pRootOfTree.right);
return lDepth>rDepth ?(lDepth+1):(rDepth+1);
}
}