タイトル説明
入力バイナリツリーのルートノードは、ツリーの決意は、平衡二分木ではありません。二分木の深さが右サブツリー内の任意のノードを残した場合、それは、平衡二分木であり、せいぜい1だけ異なります。例えば、図に二分木は、平衡二分木です。
アイデア解析
高さの差が1より大きい場合、バイナリツリー中の深さの左右のサブツリー間の高さの差を求める、それは-1を返し、説明は、平衡二分木、そうでない場合は深さの二分木ではありません。
テストケース
- 機能テスト:バイナリツリーのバランスをとる;ないバランスの取れたバイナリツリー、バイナリツリー内のすべてのノードには、左/右部分木ではありません。
- 特別な入力テスト:バイナリツリー内の唯一のノードと、バイナリツリーのnullptrヘッドノードポインタ。
Javaコード
public class Offer055_02 {
public static void main(String[] args) {
test1();
test2();
test3();
}
public static boolean IsBalanced_Solution(TreeNode root) {
return Solution1(root);
}
private static boolean Solution1(TreeNode root) {
return getDepth(root)!=-1;
}
private static int getDepth(TreeNode root) {
if(root==null) return 0;
int leftDep = getDepth(root.left);
if(leftDep == -1) return -1;
int rightDep = getDepth(root.right);
if(rightDep==-1) return -1;
return Math.abs(leftDep-rightDep) >1 ? -1 :(Math.max(leftDep,rightDep) + 1);
}
private static void test1() {
}
private static void test2() {
}
private static void test3() {
}
}