1. 程式人生 > >檢查二叉樹是否平衡

檢查二叉樹是否平衡

post fcm lan 高度 技術分享 editor balance als img

技術分享實現一個函數,檢查二叉樹是否平衡。在這個問題中。平衡樹的定義例如以下:隨意一個結點。其兩棵子樹的高度差不超過1.

直接遞歸訪問整棵樹,計算每一個結點兩棵子樹的高度。

public static int getHeight(TreeNode root)
{
if(root == null) return 0;//終止條件
return Math.max(getHeight(root.left), getHeight(root.right))+1;
}
public static boolean isBalanced(TreeNode root)

{
if(root == null) return true;//終止條件
int heightDiff=getHeight(root.left)-getHeight(root.right);
if(Math.abs(heightDiff)>1)
return false;
else//遞歸
{
return isBalanced(root.left) && isBalanced(root.right);

}
}

技術分享

public static int checkHeight(TreeNode root )
{
if(root == null)

{
return 0;//高度為0
}
//檢查左子樹是否平衡
int leftHeight=checkHeight(root.left);
if(leftHeight==-1)
{
return -1;
}
//檢查右子樹是否平衡
int rightHeight=checkHeight(root.right);
if(rightHeight == -1)
{
return -1;
}

/*檢查當前結點是否平衡*/

int heightDiff=leftHeight-rightHeight;

if(Math.abs(heightDiff)>1)

return -1;

else
{
//返回高度
return Math.max(leftHeight, rightHeight)+1;
}
}

public static boolean isBalanced(TreeNode root)
{
if(checkHeight(root)== -1)
{
return false;
}
else
{
return true;
}
}

這段代碼須要O(N)的時間和O(H)的空間,H是樹的高度。

檢查二叉樹是否平衡