IntTree クラスに追加できるメソッド makePerfect を作成するとします。メソッドは、バイナリ ツリーが「完全な」ツリーになるまでノードを追加する必要があります。完全な二分木とは、すべての葉が同じレベルにあるものです。もう 1 つの考え方は、ルートからリーフまでのすべてのパスが同じ長さになるまで、ツリーにダミー ノードを追加していることです。完全なツリーの形状は正確に三角形であり、すべての分岐ノードには正確に 2 つの子があります。ツリーに追加する各ノードには、値 0 を格納する必要があります。
前後の呼び出しの例:
私のコードはこれらのケースで機能します:
しかし、他の人は失敗します。このメソッドには、一度だけ呼び出すことができるヘルパー メソッドが含まれています。
// WRITE YOUR CODE HERE
public void makePerfect() {
overallRoot = makePerfect(overallRoot, 1);
}
private IntTreeNode makePerfect(IntTreeNode root, int lvl) {
if(root != null) {
if( lvl < height(root) ) {
if(root.left == null && root.right != null) {
root.left = new IntTreeNode(0);
root.left = makePerfect(root.left, lvl + 1);
root.right = makePerfect(root.right, lvl +1);
}if(root.right == null && root.left != null) {
root.right = new IntTreeNode(0);
root.right = makePerfect(root.right, lvl +1);
root.left =makePerfect(root.left, lvl +1);
}else if ( root.left == null && root.right == null) {
root.left = new IntTreeNode(0);
root.right = new IntTreeNode(0);
lvl++;
}else {
root.left = makePerfect(root.left, lvl +1);
root.right = makePerfect(root.right, lvl +1);
}
}
}
return root;
}
// LEAVE THESE METHODS HERE, TO USE AS HELPERS
public int height() {
return height(overallRoot);
}
private int height(IntTreeNode root) {
if (root == null) {
return 0;
} else {
return 1 + Math.max(height(root.left), height(root.right));
}
}
テスト対象外のケースは? しばらくこれに固執していましたが、どんな助けでも大歓迎です。
私のコードはこれらのケースに失敗します:
私の出力は「名前」列と同じですが、正しく再帰していません。