August 27, 2024

P58 - Generate-and-test paradigm.

Apply the generate-and-test paradigm to construct all symmetric, completely balanced binary trees with a given number of nodes.

> symmetricBalancedTrees(5, "x")
[T(x T(x . T(x)) T(x T(x) .)), T(x T(x T(x) .) T(x . T(x)))]

kotlin

package org.kotlin99.binarytrees

import com.natpryce.hamkrest.assertion.assertThat
import org.junit.Test
import org.kotlin99.binarytrees.P55Test.Companion.nodeList
import org.kotlin99.binarytrees.Tree.End
import org.kotlin99.binarytrees.Tree.Node
import org.kotlin99.common.containsAll

fun <T> symmetricBalancedTrees(treeSize: Int, value: T): List<Tree<T>> =
    balancedTrees(treeSize, value).filter { it.isSymmetric() }

class P58Test {
    @Test fun `construct all balanced and symmetric trees`() {
        assertThat(symmetricBalancedTrees(5, "x"), containsAll(nodeList(
            Node("x",
                 Node("x", End, Node("x")),
                 Node("x", Node("x"), End)),
            Node("x",
                 Node("x", Node("x"), End),
                 Node("x", End, Node("x")))
        )))
    }
}
Be first to comment
Leave a reply